//?????¢??????????????????
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

int main(){
	int H,W;
	cin >> H >> W;
	
	int DP[2][W];
	int Max=0;
	int tmp;
	
	for (int j=0;j<W;j++){
		cin >> tmp;
		DP[0][j]=1-tmp;
		Max=max(Max,DP[0][j]);
	}
	
	int row=1;
	
	for(int i=1;i<H;i++){
		cin >>tmp;
		DP[row][0]=1-tmp;
		Max=max(Max,DP[row][0]);
		for(int j=1;j<W;j++){
			cin >> tmp;
			if(tmp==0){
				DP[row][j]=min(min(DP[1-row][j],DP[row][j-1]),DP[1-row][j-1])+1;
				Max=max(Max,DP[row][j]);
			}else{
				DP[row][j]=0;
			}
		}
		row=1-row;
	}
	
	cout << Max*Max << endl;
	return 0;
}