#include<bits/stdc++.h>
using namespace std;
int p[10100][10010];
bool vis[10010][101001];
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
int n,m;
bool dfs(int x,int y,int q){
if(x==n)
return 1;
vis[x][y]=1;
for(int i=0;i<4;i++){
int a=x+dx[i];
int b=y+dy[i];
if(a>=1&&a<=n&&b>=1&&b<=m&&!vis[a][b]&&p[a][b]<=q){
if(dfs(a,b,q))return 1;
}
}
return 0;
}
int find(){
int l=-1;int r=1001;
while(l+1<r){
int mid=(l+r)/2;
memset(vis,0,sizeof vis);
if(dfs(1,1,mid))r=mid;
else l=mid;
}
cout<<r;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>p[i][j];
}
}
find();
return 0;
}