#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxx=1000000000;
int A[105][105];
int dp[105][105];
int dirx[]={-1,0,1,0};
int diry[]={0,1,0,-1};
int n,m;
bool ok(int x,int y)
{
if (x>=0 && x<n && y>=0 && y<m)
return true;
return false;
}
int dfs(int x,int y)
{
if (dp[x][y]!=0)
return dp[x][y];
int i;
for (i=0;i<=3;i++)
{
int u=x+dirx[i];
int v=y+diry[i];
if (ok(u,v) && A[u][v]<A[x][y])
dp[x][y]=max(dp[x][y],dfs(u,v)+1);
}
if (dp[x][y]!=0)
return dp[x][y];
return 1;
}
int main()
{
int i,j;
int maxn=0;
scanf("%d%d",&n,&m);
for (i=0;i<n;i++)
for (j=0;j<m;j++)
scanf("%d",&A[i][j]);
for (i=0;i<n;i++)
for (j=0;j<m;j++)
{
int length=dfs(i,j);
if (length>maxn)
maxn=length;
}
printf("%d\n",maxn);
}