#include<bits/stdc++.h>
using namespace std;
int i,j,k,n,m,a[10]={1,-1},a1[10]={0,0,1,-1};
bool l;
int d[1086][1086],b[186][186];
int dfs(int x,int y){
if(d[x][y]){
return d[x][y];
}
d[x][y]=1;
for(int i=0;i<4;i++){
int xx=x+a[i];
int yy=y+a1[i];
if(xx>0&&yy>0&&xx<=n&&yy<=m&&d[xx][yy]<d[x][y]){
dfs(xx,yy);
d[x][y]=max(d[x][y],d[xx][yy]+1);
}
}
return d[x][y];
}
int main(){
cin>>n>>m;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
cin>>d[i][j];
}
}
int sum=0;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
sum=max(dfs(i,j),sum);
}
}
cout<<sum;
return 0;
}