#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);
    }
  }
}