#include<bits/stdc++.h> using namespace std; using ll=long long; using P=pair<ll,ll>; int main(){ ll h,w; cin>>h>>w; vector<vector<ll>> a(h,vector<ll>(w)); for(ll i=0;i<h;i++){ for(ll j=0;j<w;j++){ cin>>a[i][j]; } } vector<vector<ll>> co(h,vector<ll>(w,-1)); co[0][0]=1; co[h-1][w-1]=0; vector<ll> dx={0,0,-1,1}; vector<ll> dy={-1,1,0,0}; set<ll> k1,k2; map<ll,P> rev; k1.insert(a[0][1]); k1.insert(a[1][0]); k2.insert(a[h-2][w-1]); k2.insert(a[h-1][w-2]); for(ll i=0;i<h;i++){ for(ll j=0;j<w;j++){ rev[a[i][j]]=P(i,j); } } for(ll i=0;;i++){ if(i%2==0){ ll e; for(auto num:k1){ auto [x,y]=rev[num]; if(co[x][y]==-1){ co[x][y]=1; for(ll j=0;j<4;j++){ ll nx=x+dx[j]; ll ny=y+dy[j]; if(0<=nx&&nx<h&&0<=ny&&ny<w){ if(co[nx][ny]==-1){ k1.insert(a[nx][ny]); }else if(co[nx][ny]==0){ cout<<i+1<<endl; exit(0); } } } e=num; break; } } k1.erase(e); }else{ ll e; for(auto num:k2){ auto [x,y]=rev[num]; if(co[x][y]==-1){ co[x][y]=0; for(ll j=0;j<4;j++){ ll nx=x+dx[j]; ll ny=y+dy[j]; if(0<=nx&&nx<h&&0<=ny&&ny<w){ if(co[nx][ny]==-1){ k2.insert(a[nx][ny]); }else if(co[nx][ny]==1){ cout<<i+1<<endl; exit(0); } } } e=num; break; } } k2.erase(e); } } }