滑雪
import java.io.*;
import java.util.*;
public class Main{
static int N=310;
static int r,c;
static int[][] h=new int[N][N];
static int[][] f=new int[N][N];
static int[] dx={-1,0,1,0};
static int[] dy={0,1,0,-1};
public static void main(String[] args)throws IOException{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String[] strs=in.readLine().split(" ");
r=Integer.parseInt(strs[0]);
c=Integer.parseInt(strs[1]);
for(int i=1;i<=r;i++){
strs=in.readLine().split(" ");
for(int j=1;j<=c;j++)
h[i][j]=Integer.parseInt(strs[j-1]);
}
for(int i=0;i<=r;i++)Arrays.fill(f[i],-1);
int res=0;
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
res=Math.max(res,dp(i,j));
System.out.println(res);
}
static int dp(int x,int y){
if(f[x][y]!=-1) return f[x][y];
f[x][y]=1;
for(int i=0;i<4;i++){
int tx=x+dx[i];
int ty=y+dy[i];
if(tx>0&&tx<=r&&ty>0&&ty<=c){
if(h[tx][ty]<h[x][y]){
f[x][y]=Math.max(f[x][y],dp(tx,ty)+1);
}
}
}
return f[x][y];
}
}