#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int g[N][N];
bool st[N][N];
int n,m;
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
int u;
int dfs(int x,int y){
if(x==n){
return 1;
}
st[x][y]=1;
for(int i=0;i<4;i++){
int tx=dx[i]+x,ty=dy[i]+y;
if(tx<1||tx>n||ty<1||ty>m) continue;
if(st[tx][ty]) continue;
if(g[tx][ty]<=u){
if(dfs(tx,ty)) return 1;
}
}
return 0;
}
bool check(int mid){
u=mid;
memset(st,0,sizeof st);
return dfs(1,1);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>g[i][j];
}
}
int l=0,r=1000,ans=-1;
while(l<=r){
int mid=(l+r)>>1;
if(check(mid)){
ans=mid;
r=mid-1;
}else{
l=mid+1;
}
}
cout<<ans<<"\n";
return 0;
}