代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <queue>
#define mem(p,k) memset(p,k,sizeof(p));
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define inf 0x6fffffff
#define LL long long
using namespace std;
int mapp[1100][1100],dp[1100][1100];
int main()
{
int t;
cin>>t;
while(t--){
int n,m,ans=-1;
cin>>n>>m;
mem(mapp,0);
mem(dp,0);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)scanf("%d",mapp[i]+j);
}
for(int i=0;i<m;i++){
int sum=0;
for(int j=0;j<n;j++){
if(mapp[j][i]){
sum++;
}
else sum=0;
dp[j][i]=sum;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(ans<dp[i][j]){
int le=dp[i][j],k;
for(k=j;k<n&&le>ans;k++){
le=min(dp[i][k],le);
ans=max(ans,min(le,k-j+1));
//if(i==3)cout<<le<<" "<<ans<<endl;
}
j=k;
}
}
}
cout<<ans<<endl;
}
return 0;
}