#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
int n,m;
int f[10024];
struct Node{
int x,y;
int h;
};
Node nodes[10024];
bool cmp(Node A,Node B){
return A.h < B.h;
}
void Init(){
cin>>n>>m;
for(int y = 1;y <= n;y++){
for(int x = 1;x <= m;x++){
cin>>nodes[(y-1)*n+x].h;
nodes[(y-1)*n+x].x = x;
nodes[(y-1)*n+x].y = y;
}
}
sort(nodes+1,nodes+n*m+1,cmp);
}
void Work(){
int ans = -1;
for(int i = 1;i <= n*m;i++){
f[i] = 1;
for(int j = 1;j < i;j++){
if((abs(nodes[i].x - nodes[j].x)==1 && (nodes[i].y - nodes[j].y==0))||(abs(nodes[i].y - nodes[j].y)==1 && (nodes[i].x - nodes[j].x==0))){
f[i] = max(f[i],f[j]+1);
}
}
ans = max(ans,f[i]);
}
cout<<ans<<endl;
}
int main(){
Init();
Work();
}