全RE
#include<bits/stdc++.h>
using namespace std;
int mapp[1010][1010],vis[1010][1010],n,m;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
struct node{
int x,y;
};
queue<node>q;
int check(int mid){
for(int i=0;i<1010;i++){
for(int j=0;j<1010;i++){
vis[i][j]=0;
}
}
node start,now,next;
start.x=1,start.y=1;
q.push(start);
vis[1][1]=1;
while(q.empty()==0){
now=q.front();
q.pop();
for(int i=0;i<4;i++){
next.x=now.x+dx[i];
next.y=now.y+dy[i];
if(next.x>1&&next.y>=1&&next.x<=n&&next.y<=m
&&vis[next.x][next.y]==0&&mapp[next.x][next.y]<=mid){
vis[next.x][next.y]=1;
q.push(next);
}
}
}
int flag=1;
for(int i=1;i<=m;i++){
if(vis[n][i]==0){
flag=0;
}
}
if(flag==0) return 0;
else return 1;
}
int main(){
cin>>n>>m;
int l=0,r=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mapp[i][j];
r=max(r,mapp[i][j]);
}
}
while(l<=r){
int mid=(l+r)/2;
if(check(mid)==1) r=mid-1;
else l=mid+1;
}
if(check(l)==1) cout<<l<<endl;
else cout<<r<<endl;
return 0;
}