#include<stdio.h>
int map[1100][1100];
int sum[1100][1100];
int n,m;
int min(int x,int y){
return x>y?y:x;
}
int check(int mid){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
sum[i][j]=(map[i][j]<mid?1:0);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
sum[i][j]+=sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1];
}
}
for(int i=1;i+mid-1<=n;i++){
for(int j=1;j+mid-1<=m;j++){
if(sum[i+mid-1][j+mid-1]-sum[i-1][j+mid-1]-sum[i+mid-1][j-1]+sum[i-1][j-1]==0){
return 1;
}
}
}
return 0;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&map[i][j]);
}
}
int max=0;
int l=1,r=min(n,m);
while(l<=r){
int mid=(l+r)/2;
if(check(mid))
{
l=mid+1;
max=mid;
}
else{
r=mid-1;
}
}
printf("%d\n",max);
}
}