#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){
ans[p][las]=w;
for(int i=1;i<=m;i++){
int newFloor=p+c[i];
if(newFloor>=1&&newFloor<=n&&((ans[newFloor][i]==-1)||(w+abs(las-i)+abs(c[i]*2)<ans[newFloor][i]))){
q.push({newFloor,w+abs(las-i)+abs(c[i]*2),i});
ans[newFloor][i]=w+abs(las-i)+abs(c[i]*2);
}
}
}
signed main(){
scanf("%lld%lld",&n,&m);
int az;
for(int i=1;i<= m;i++){
scanf("%lld",&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<=n;i++){
for(int j=1;j<=m;j++){
printf("%d ",ans[i][j]);
}
printf("\n");
}
for(int i=1;i<=m;i++){
if(ans[n][i]!=-1){
if(js==-1){
js=ans[n][i];
}
else{
js=min(js,ans[n][i]);
}
}
}
printf("%lld",js);
return 0;
}