rendered paste body#include<stdio.h>
#include<limits.h>
long mat[1001][1001];
char bin[1001][1001];
long ans[1001][1001];
long max=0;
long N;
long n,m;
long mini(long a,long b)
{
if(a>b)
return b;
else
return a;
}
int main()
{
long i;
long j;
long x;
long t;
scanf("%ld",&N);
for(x=0;x<N;x++)
{
max=0;
scanf("%ld %ld",&m,&n);
for(i=0;i<=m;i++)
{
bin[i][0]=0;
mat[i][0]=LONG_MAX;
ans[i][0]=0;
}
for(i=0;i<=n;i++)
{
bin[0][i]=0;
mat[0][i]=LONG_MAX;
ans[0][i]=0;
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
scanf("%ld",&mat[i][j]);
if(mat[i][j]<=mat[i][j-1] && mat[i][j]<=mat[i-1][j])
{
bin[i][j]=1;
}
else
{
bin[i][j]=0;
}
}
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
t=mini(ans[i-1][j],ans[i][j-1]);
if(bin[i][j]==1)
{
if(t>=ans[i-1][j-1])
{
ans[i][j]=ans[i-1][j-1]+1;
}
else
{
ans[i][j]=t+1;
}
if(ans[i][j]>max)
{
max=ans[i][j];
}
}
else
{
ans[i][j]=0;
}
}
}
max++;
printf("%ld\n",max*max);
}
return 0;
}