#include <iostream>
#include <cstdio>
using namespace std;
int n,m,p[1001][1001],vis[1001][1001];
bool judge(int mid,int xio,int yio){
cout<<xio<<" "<<yio<<endl;
if(xio==-1&&yio==-1) {
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) vis[i][j]=0;
for(int i=1;i<=m;i++)
if(!judge(mid,n,i)) return false;
return true;
}
else if(p[xio][yio]>mid) return false;
if(xio==1) return true;
int a,b,c,d;
if(xio-1>=1&&xio-1<=n){
if(yio>=1&&yio<=m&&!vis[xio-1][yio]) {
vis[xio-1][yio]=1;
a=judge(mid,xio-1,yio);
vis[xio-1][yio]=0;
}
}
if(xio+1>=1&&xio+1<=n){
if(yio>=1&&yio<=m&&!vis[xio+1][yio]) {
vis[xio+1][yio]=1;
c=judge(mid,xio+1,yio);
vis[xio+1][yio]=0;
}
}
if(xio>=1&&xio<=n){
if(yio-1>=1&&yio-1<=m) {
vis[xio][yio-1]=1;
b=judge(mid,xio,yio-1);
vis[xio][yio-1]=0;
}
if(yio+1>=1&&yio+1<=m) {
vis[xio][yio+1]=1;
d=judge(mid,xio,yio+1);
vis[xio][yio+1]=0;
}
}
//x-1,y x,y-1 x,y+1 x+1,y
if((!a)&&(!b)&&(!c)&&(!d)) return false;
}
int main()
{
cin>>n>>m;
int iMax=-0x7fffffff;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>p[i][j];
iMax=max(p[i][j],iMax);
}
judge(3,-1,-1);
int l=0,r=iMax,mid,ans;
while(l<=r){
mid=(l+r)>>1;
if(judge(mid,-1,-1)) {
l=mid+1;
ans=mid;
}
else r=mid-1;
}
cout<<ans;
return 0;
}