#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
int n,k,cnt;
LL w,g[50],sum[1<<24],ans;
void dfs1(int cur,LL res){
if(cur==k){
sum[cnt++]=res;
return;
}
if(g[cur]+res<=w)dfs1(cur+1,g[cur]+res);
dfs1(cur+1,res);
}
void dfs2(int cur,LL res){
if(cur==n){
int left,mid,right;
left=0;right=cnt-1;
while(left<right){
mid=left+right+1>>1;
if(sum[mid]+res<=w)left=mid;
else right=mid-1;
}
if(sum[left]+res<=w)ans=max(ans,sum[left]+res);
return;
}
if(g[cur]+res<=w)dfs2(cur+1,g[cur]+res);
dfs2(cur+1,res);
}
int main(){
cin>>w>>n;
for(int i=0;i<n;i++)cin>>g[i];
sort(g,g+n);
reverse(g,g+n);
k=n/2+2;
dfs1(0,0);
sort(sum,sum+cnt);
int tmp=1;
for(int i=1;i<cnt;i++)
if(sum[i]!=sum[i-1])
sum[tmp++]=sum[i];
cnt=tmp;
dfs2(k,0);
cout<<ans<<endl;
return 0;
}