#include #include #define rep(i,n) for(int i=0;i vi; typedef vector vl; typedef vector> vvi; typedef vector> vvl; typedef long double ld; typedef pair P; ostream& operator<<(ostream& os, const modint& a) {os << a.val(); return os;} template ostream& operator<<(ostream& os, const static_modint& a) {os << a.val(); return os;} template istream& operator>>(istream& is, vector& v){int n = v.size(); assert(n > 0); rep(i, n) is >> v[i]; return is;} template ostream& operator<<(ostream& os, const pair& p){os << p.first << ' ' << p.second; return os;} template ostream& operator<<(ostream& os, const vector& v){int n = v.size(); rep(i, n) os << v[i] << (i == n - 1 ? "\n" : " "); return os;} template ostream& operator<<(ostream& os, const vector>& v){int n = v.size(); rep(i, n) os << v[i] << (i == n - 1 ? "\n" : ""); return os;} int main(){ int l, n; cin >> l >> n; vi a(n); cin >> a; a.push_back(l); n++; vi dp1(2 * l + 1, 0), dp2(2 * l + 1, 0); dp1[l] = 1; rep(i, n){ vi old1(2 * l + 1, 0), old2(2 * l + 1, 0); int dist = a[i]; if(i > 0) dist -= a[i - 1]; swap(dp1, old1); swap(dp2, old2); for(int from = 0; from <= 2 * l; from++){ if(old1[from] or old2[from]){ int plus = from + dist; if(plus >= 0 and plus <= 2 * l){ dp1[plus] = 1; } if(i == 0) continue; int minus = from - dist; if(minus >= 0 and minus <= 2 * l){ dp2[minus] = 1; } } } // cout << dp1 << dp2; } int ans = l; for(int from = 0; from <= 2 * l; from++){ if(dp2[from]) ans = min(ans, abs(from - l)); } cout << ans << "\n"; return 0; }