#include<bits/stdc++.h>
#define int long long int
using namespace std;
struct Node{
int p,w,las;
};
int c[21];
int ans[1001][21];
queue <Node> q;
int n,m;
void bfs(int p,int w,int las){
// printf("%d %d %d\n",p,w,las);
ans[p][las]=w;
// for(int i=1;i<=n;i++){
// for(int j=1;j<=m;j++){
// printf("%d ",ans[i][j]);
// }
// printf("\n");
// }
for(int i=1;i<=m;i++){
if(p+c[i]<=n&&(p+c[i])>=1&&((ans[p+c[i]][i]==-1)||(w+abs(las-i)+abs(c[i]*2)<ans[p+c[i]][i]))){
q.push({p+c[i],w+abs(las-i)+abs(c[i]*2),i});
ans[p+c[i]][i]=w+abs(las-i)+abs(c[i]*2);
}
}
}
signed main(){
scanf("%d%d",&n,&m);
int az;
for(int i=1;i<=m;i++){
scanf("%d",&c[i]);
if(c[i]==0){
az=i;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
ans[i][j]=-1;
}
}
q.push({1,0,az});
while(!q.empty()){
bfs(q.front().p,q.front().w,q.front().las);
q.pop();
}
int js=-1;
for(int i=1;i<=m;i++){
if(js==-1){
js=ans[n][i];
}
else{
js=min(js,ans[n][i]);
}
}
// for(int i=1;i<=n;i++){
// printf("%d ",ans[i][1]);
// }
// printf("\n");
printf("%lld",js);
return 0;
}
别问为什么不用dij,因为想试试bfs能不能过