rt
//acwing171
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long ll;
vector<ll> lv,rv;
ll w,g[50],ans;
int n;
inline void dfs(int l,int r,ll sum,vector<ll> &v){
if(sum>w) return;
if(l==r+1){ v.push_back(sum); return; }
dfs(l+1,r,sum+g[l],v),dfs(l+1,r,sum,v);
return;
}
int main(){
scanf("%lld%d",&w,&n);
for(register int i=1; i<=n; ++i) scanf("%lld",&g[i]);
int mid=(n+1)>>1; dfs(1,mid,0,lv); dfs(mid+1,n,0,rv);
sort(lv.begin(),lv.end()); sort(rv.begin(),rv.end());
for(register int i=0,j=lv.size()-1; i<rv.size(); ++i){
while(j&&rv[i]+lv[j]>w) --j;
ans=max(ans,rv[i]+lv[j]);
}
printf("%lld",ans);
return 0;
}