#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, w, g[101];
vector <ll> a, b;
void dfs1(int i, ll v, int l, int r) {
if (v > w) return ;
if (i == r + 1) {
a.push_back(v);
return ;
}
dfs1(i + 1, v + g[i], l, r);
dfs1(i + 1, v, l, r);
}
void dfs2(int i, ll v, int l, int r) {
if (v > w) return ;
if (i == r + 1) {
b.push_back(v);
return ;
}
dfs2(i + 1, v + g[i], l, r);
dfs2(i + 1, v, l, r);
}
int main() {
cin >> w >> n;
for (int i = 1; i <= n; i++) cin >> g[i];
int m = n / 2;
dfs1(1, 0, 1, m);
dfs2(m + 1, 0, m + 1, n);
sort(b.begin(), b.end());
ll maxx = -1;
for (int i = 0; i < a.size(); i ++) {
int l = 0, r = b.size(), mid; ll ans = INT_MAX;
while (l <= r) {
mid = (l + r + 1) >> 1;
ans = min(ans, abs(w - (a[i] + b[mid])));
if (w >= a[i] + b[mid]) {
l = mid + 1;
}else {
r = mid - 1;
}
}
maxx = max(maxx, ans + a[i]);
}
cout << maxx ;
return 0;
}