#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<fstream>
#include<map>
#include<ctime>
#include<set>
#include<queue>
#include<cmath>
#include<vector>
#include<bitset>
#include<functional>
#define x first
#define y second
#define mp make_pair
#define pb push_back
#define REP(i,l,r) for((i)=(l);(i)<=(r);++(i))
#define REP2(i,l,r) for((i)=(l);(i)!=(r);++(i))
using namespace std;
typedef long long LL;
typedef double ld;
const int NUM=2000+10;
const int INF=2000000000;
int m,n;
int a[NUM];
int f[NUM][NUM],sum[NUM];
//f[i][j]=f[k][j-1] + sum[k][j-1]-sum[i][j]
void update(int& a,int b)
{
if(b==-1)
return;
if(a==-1 || b<a)
a=b;
}
int calc(int a,int b)
{
return sum[b]-sum[a-1]+b-a;
}
int main()
{
int i,j;
scanf("%d%d",&m,&n);
REP(i,1,n)
{
cin>>a[i];
sum[i]=sum[i-1]+a[i];
}
memset(f,-1,sizeof f);
REP(i,1,n)
if(calc(1,i)<=m)
f[1][i]=0;
REP(i,2,n)
{
int l=i-1,mm=INF;
REP(j,i,n)
{
int Me=calc(i,j);
if(Me>m)
break;
for(;l>=1 && calc(l,i-1)<=Me;--l)
if(f[l][i-1]!=-1)
mm=min(f[l][i-1]-calc(l,i-1),mm);
if(mm==INF)
continue;
update(f[i][j],mm+Me);
}
l=1,mm=INF;
for(j=n;j>=i;--j)
{
int Me=sum[j]-sum[i-1]+j-i;
if(Me>m)
continue;
for(;l<=i-1 && calc(l,i-1)>=Me;++l)
if(f[l][i-1]!=-1)
mm=min(f[l][i-1]+calc(l,i-1),mm);
if(mm==INF)
continue;
update(f[i][j],mm-Me);
}
}
int ans=-1;
REP(i,1,n)
update(ans,f[i][n]);
printf("%d\n",ans);
return 0;
}
I2luY2x1ZGU8Y3N0ZGlvPgojaW5jbHVkZTxjc3RkbGliPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPGlvc3RyZWFtPgojaW5jbHVkZTxmc3RyZWFtPgojaW5jbHVkZTxtYXA+CiNpbmNsdWRlPGN0aW1lPgojaW5jbHVkZTxzZXQ+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTxjbWF0aD4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxiaXRzZXQ+CiNpbmNsdWRlPGZ1bmN0aW9uYWw+CiNkZWZpbmUgeCBmaXJzdAojZGVmaW5lIHkgc2Vjb25kCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgUkVQKGksbCxyKSBmb3IoKGkpPShsKTsoaSk8PShyKTsrKyhpKSkKI2RlZmluZSBSRVAyKGksbCxyKSBmb3IoKGkpPShsKTsoaSkhPShyKTsrKyhpKSkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIExMOwp0eXBlZGVmIGRvdWJsZSBsZDsKCmNvbnN0IGludCBOVU09MjAwMCsxMDsKY29uc3QgaW50IElORj0yMDAwMDAwMDAwOwoKaW50IG0sbjsKaW50IGFbTlVNXTsKaW50IGZbTlVNXVtOVU1dLHN1bVtOVU1dOwovL2ZbaV1bal09ZltrXVtqLTFdICsgc3VtW2tdW2otMV0tc3VtW2ldW2pdCgp2b2lkIHVwZGF0ZShpbnQmIGEsaW50IGIpCnsKCWlmKGI9PS0xKQoJCXJldHVybjsKCWlmKGE9PS0xIHx8IGI8YSkKCQlhPWI7Cn0KCmludCBjYWxjKGludCBhLGludCBiKQp7CglyZXR1cm4gc3VtW2JdLXN1bVthLTFdK2ItYTsKfQoKaW50IG1haW4oKQp7CglpbnQgaSxqOwoJc2NhbmYoIiVkJWQiLCZtLCZuKTsKCVJFUChpLDEsbikKCXsKCQljaW4+PmFbaV07CgkJc3VtW2ldPXN1bVtpLTFdK2FbaV07Cgl9CgltZW1zZXQoZiwtMSxzaXplb2YgZik7CglSRVAoaSwxLG4pCgkJaWYoY2FsYygxLGkpPD1tKQoJCQlmWzFdW2ldPTA7CglSRVAoaSwyLG4pCgl7CgkJaW50IGw9aS0xLG1tPUlORjsKCQlSRVAoaixpLG4pCgkJewoJCQlpbnQgTWU9Y2FsYyhpLGopOwoJCQlpZihNZT5tKQoJCQkJYnJlYWs7CgkJCWZvcig7bD49MSAmJiBjYWxjKGwsaS0xKTw9TWU7LS1sKQoJCQkJaWYoZltsXVtpLTFdIT0tMSkKCQkJCQltbT1taW4oZltsXVtpLTFdLWNhbGMobCxpLTEpLG1tKTsKCQkJaWYobW09PUlORikKCQkJCWNvbnRpbnVlOwoJCQl1cGRhdGUoZltpXVtqXSxtbStNZSk7CgkJfQoJCWw9MSxtbT1JTkY7CgkJZm9yKGo9bjtqPj1pOy0taikKCQl7CgkJCWludCBNZT1zdW1bal0tc3VtW2ktMV0rai1pOwoJCQlpZihNZT5tKQoJCQkJY29udGludWU7CgkJCWZvcig7bDw9aS0xICYmIGNhbGMobCxpLTEpPj1NZTsrK2wpCgkJCQlpZihmW2xdW2ktMV0hPS0xKQoJCQkJCW1tPW1pbihmW2xdW2ktMV0rY2FsYyhsLGktMSksbW0pOwoJCQlpZihtbT09SU5GKQoJCQkJY29udGludWU7CgkJCXVwZGF0ZShmW2ldW2pdLG1tLU1lKTsKCQl9Cgl9CglpbnQgYW5zPS0xOwoJUkVQKGksMSxuKQoJCXVwZGF0ZShhbnMsZltpXVtuXSk7CglwcmludGYoIiVkXG4iLGFucyk7CglyZXR1cm4gMDsKfQ==