#include #include #include using namespace atcoder; using mint = modint998244353; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000001 #define Inf64 1000000000000000001 int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n,m; cin>>n>>m; vector a(m); rep(i,m){ cin>>a[i]; a[i]--; } reverse(a.begin(),a.end()); vector d(m+1,vector(n,Inf32)); d[0][0] = 0; deque> Q; Q.emplace_back(0,0); while(Q.size()>0){ int x = Q.front().first,y = Q.front().second; Q.pop_front(); if(y!=n-1){ int nx = x,ny = y+1; int nD = d[x][y] + 1; if(d[nx][ny] > nD){ d[nx][ny] = nD; Q.emplace_back(nx,ny); } } if(y!=0){ int nx = x,ny = y-1; int nD = d[x][y] + 1; if(d[nx][ny] > nD){ d[nx][ny] = nD; Q.emplace_back(nx,ny); } } if(x!=m){ int nx = x+1,ny = y; if(a[x]+1==y){ ny = a[x]; } else if(a[x]==y){ ny = y+1; } int nD = d[x][y]; if(d[nx][ny] > nD){ d[nx][ny] = nD; Q.emplace_front(nx,ny); } } } for(int i=1;i