#include <bits/stdc++.h>
using namespace std;
int r,c;
int x[102][102]={0};
int visit[102][102]={0};
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int ans=-1;
int dfs(int a,int b){
if(visit[a][b])return visit[a][b];
visit[a][b]=1;
for(int i=0;i<4;i++){
int xx=a+dx[i];
int yy=b+dy[i];
if(x[xx]&&x[yy]&&x[a]>x[xx]&&x[b]>x[yy]){
dfs(xx,yy);
visit[a][b]=max(visit[a][b],visit[xx][yy]+1);
}
}
return visit[a][b];
}
int main(){
cin>>r>>c;
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
cin>>x[i][j];
}
}
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
ans=max(ans,dfs(i,j));
}
}
cout<<ans;
}