#include <bits/stdc++.h>
#define ll long long
#define yes {puts("Yes");return 0;}
#define no {puts("No");return 0;}
#define BZHZS puts("BZH is a handsome boy.");
using namespace std;
int n, m, ans;
int walk1[] = {1, -1, 0, 0};
int walk2[] = {0, 0, 1, -1};
int a[103][103], rmb[103][103];
void ts (int a, string tt)
{
cout << tt << ":: " << a << endl;
system ("pause");
return;
}
void dfs (int x, int y, int cur)
{
if (cur < rmb[x][y])
return;
rmb[x][y] = cur;
for (register int i=0; i<=3; i++)
{
int tox = x+walk1[i];
int toy = y+walk2[i];
if (tox>=1 && tox<=n && toy>=1 && toy<=m && a[tox][toy]<a[x][y])
dfs (tox, toy, cur+1);
}
}
int main()
{
ios:: sync_with_stdio (0);
cin >> n >> m;
for (register int i=1; i<=n; i++)
for (register int j=1; j<=m; j++)
cin >> a[i][j];
for (register int i=1; i<=n; i++)
for (register int j=1; j<=m; j++)
if (rmb[i][j] == 0)
dfs (i, j, 0);
for (register int i=1; i<=n; i++)
for (register int j=1; j<=m; j++)
ans = max (ans, rmb[i][j]);
cout << ans+1 << endl;
return 0;
}