#include<stdio.h>
#include<string.h>
int a[102][102];
char mp[102][102];
int n,m,max;
void dfs(int x,int y,int t)
{
if(max<t)
max=t;
if(mp[x][y]=='0'&&a[x][y]>a[x-1][y]&&x-1>=0)
{
mp[x][y]='1';
dfs(x-1,y,t+1);
mp[x][y]='0';
}
if(mp[x][y]=='0'&&a[x][y]>a[x+1][y]&&x+1<n)
{
mp[x][y]='1';
dfs(x+1,y,t+1);
mp[x][y]='0';
}
if(mp[x][y]=='0'&&a[x][y]>a[x][y-1]&&y-1>=0)
{
mp[x][y]='1';
dfs(x,y-1,t+1);
mp[x][y]='0';
}
if(mp[x][y]=='0'&&a[x][y]>a[x][y+1]&&y+1<m)
{
mp[x][y]='1';
dfs(x,y+1,t+1);
mp[x][y]='0';
}
}
int main()
{
int s;
scanf("%d",&s);
while(s--)
{
int i,j;
memset(mp,'0',sizeof(mp));
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
for(max=0,i=0;i<n;i++)
for(j=0;j<m;j++)
dfs(i,j,0);
printf("%d\n",max+1);
}
return 0;
}
#include<string.h>
int a[102][102];
char mp[102][102];
int n,m,max;
void dfs(int x,int y,int t)
{
if(max<t)
max=t;
if(mp[x][y]=='0'&&a[x][y]>a[x-1][y]&&x-1>=0)
{
mp[x][y]='1';
dfs(x-1,y,t+1);
mp[x][y]='0';
}
if(mp[x][y]=='0'&&a[x][y]>a[x+1][y]&&x+1<n)
{
mp[x][y]='1';
dfs(x+1,y,t+1);
mp[x][y]='0';
}
if(mp[x][y]=='0'&&a[x][y]>a[x][y-1]&&y-1>=0)
{
mp[x][y]='1';
dfs(x,y-1,t+1);
mp[x][y]='0';
}
if(mp[x][y]=='0'&&a[x][y]>a[x][y+1]&&y+1<m)
{
mp[x][y]='1';
dfs(x,y+1,t+1);
mp[x][y]='0';
}
}
int main()
{
int s;
scanf("%d",&s);
while(s--)
{
int i,j;
memset(mp,'0',sizeof(mp));
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
for(max=0,i=0;i<n;i++)
for(j=0;j<m;j++)
dfs(i,j,0);
printf("%d\n",max+1);
}
return 0;
}