import java.util.*;
public class Main {
public static int AC[][]=new int[200][200];
public static boolean square(int i,int j,int b){
int flag=AC[i][j];
for(int x=0;x<b;x++){
for(int y=0;y<b;y++){
if(AC[i+x][j+y]!=flag)
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int R=sc.nextInt();
int C=sc.nextInt();
int maxBC=Math.min(R, C);//最大边长不可超过矩形最短边
//传入数组
for(int x=0;x<R;x++){
for(int y=0;y<C;y++){
AC[x][y]=sc.nextInt();
}
}
int max=0;//正方形最大边长
int b;//正方形边长
for(int x=0;x<R;x++){
for(int y=0;y<C;y++){
for(b=max+1;b<=maxBC;b++){
if(x+b<=R&&y+b<=C){
if(square(x,y,b))
max=b;
else
continue;
}
}
}
}
System.out.println(max*max);
}
}
/**************************************************************
Problem: 1954
User: admin
Language: Java
Result: Accepted
Time:5378 ms
Memory:64064 kb
****************************************************************/