#include <stdio.h>
int H, W, s[1400][1400], t[1401][1401];
int range(int x1, int y1, int x2, int y2) {
	return t[x2][y2] + t[x1][y1] - t[x1][y2] - t[x2][y1];
}
bool check(int x) {
	for(int i = 0; i <= H - x; i++) {
		for(int j = 0; j <= W - x; j++) {
			if(!range(i, j, i + x, j + x)) return true;
		}
	}
	return false;
}
int main() {
	scanf("%d%d", &H, &W);
	for(int i = 0; i < H; i++) {
		for(int j = 0; j < W; j++) scanf("%d", &s[i][j]);
	}
	for(int i = 0; i < H; i++) {
		for(int j = 0; j < W; j++) {
			t[i + 1][j + 1] = t[i + 1][j] + t[i][j + 1] - t[i][j] + s[i][j];
		}
	}
	int l = 0, r = 1400;
	while(r - l > 1) {
		int m = (l + r) / 2;
		if(check(m)) l = m;
		else r = m;
	}
	printf("%d\n", l * l);
	return 0;
}