#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=(1<<24)+1;
ll ans,n,m,a[N],s[N],n_2;
void find1(int val)
{
int l=1,r=n_2;
ll check=m-val;
while(r>l)
{
int mid=(l+r+1)>>1;
if(check >= s[mid]) l=mid;
else r=mid-1;
}
ans=max(ans,val+s[r]);
}
void dfs(int u,ll sum)
{
if(u==n/2+2+1){
s[++n_2] = sum;
return;
}
if(sum+a[u]<=m) dfs(u+1,sum+a[u]);
dfs(u+1,sum);
}
void dfs2(int u,ll sum)
{
if(u==n+1){
find1(sum);
return;
}
if(sum+a[u]<=m) dfs2(u+1,sum+a[u]);
dfs2(u+1,sum); // 不能写 else dfs2(u+1,sum)
}
int main()
{
cin>>m>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
reverse(a+1,a+n+1);
dfs(1,0);
sort(s+1,s+n_2+1);
n_2=unique(s+1,s+n_2+1)-(s+1);
dfs2(n/2+3,0);
cout<<ans<<endl;
return 0;
}