#include<bits/stdc++.h>
#define N 50
#define int long long
using namespace std;
int s[N],n,m,f[N],t,tot,mid,ans;
map <int,bool> p;
void dfs(int h,int l)
{
for(int i = l + 1;i <= t;i ++)
{
if(s[i] + h <= m)
{
dfs(s[i] + h,i);
}
}
if(!p[h])
{
p[h] = 1;
f[++ tot] = h;
ans = max(ans,h);
}
return;
}
void find(int a)
{
int l = 1,r = mid,mid_f;
while(l <= r)
{
mid_f = (l + r) / 2;
if(s[mid_f] + a > m) r = mid_f - 1;
else
{
l = mid_f + 1;
ans = max(ans,s[mid_f] + a);
}
}
return;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> m >> n;
t = n / 2 + 2;
for(int i = 1;i <= n;i ++) cin >> s[i];
for(int i = 1;i <= t;i ++) dfs(s[i],i);
t = n,mid = tot;
sort(f + 1,f + 1 + tot);
for(int i = n / 2 + 3;i <= n;i ++) dfs(s[i],i);
for(int i = mid + 1;i <= tot;i ++) find(f[i]);
cout << ans << endl;
return 0;
}