//By Vlgd
#include<bits/stdc++.h>
using namespace std;
const int N=1401;
int M[N][N],dp[N][N],h,w;
int solve(){
	int ans=0;
	for(int i=0;i<=h;i++) M[i][0]=1; 
	for(int i=0;i<=w;i++) M[0][i]=1;
	for(int i=1;i<=h;i++)
		for(int j=1;j<=w;j++)
			if(M[i][j]) dp[i][j]=0;
			else{
				dp[i][j]=min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1]))+1;
				ans=max(ans,dp[i][j]);
			}
	return ans*ans;
}
int main(){
	scanf("%d%d",&h,&w);
	for(int i=1;i<=h;i++) for(int j=1;j<=w;j++) scanf("%d",&M[i][j]);
	printf("%d\n",solve());
} 
