#include<iostream>
#include<cmath>
using namespace std;
int mp[110][110],u[110][110],n,m;
int xx[4] = { -1,1,0,0 };
int yy[4] = { 0,0,-1,1 };
void dfs(int dx, int dy)
{
for (int h = 0; h < 4; h++)
{
int x = dx + xx[h], y = dy + yy[h];
if(x>0&&x<=n&&y>0&&y<=m)
if (mp[x][y] < mp[dx][dy])
{
if (u[x][y] == 0) {
u[x][y] = 1;
dfs(x, y);
u[dx][dy] = max(u[x][y] + 1, u[dx][dy]);
}
else {
u[dx][dy] = max(u[x][y] + 1, u[dx][dy]);
}
}
}
}
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> mp[i][j];
int sum = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
if (u[i][j] == 0) {
dfs(i, j);
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
sum = max(u[i][j], sum);
cout << sum << endl;
return 0;
}