#include <iostream>
using namespace std;
const int MAX_SIZE = 1000;
bool is_square(int upLeftX, int upLeftY, int k, short int mt[MAX_SIZE][MAX_SIZE]) {
int sameDigit = mt[upLeftX][upLeftY];
for (int s = 1; s <= k; ++s) {
bool equals = mt[upLeftX][upLeftY + s] != sameDigit || mt[upLeftX + k][upLeftY + s] != sameDigit;
if (equals || mt[upLeftX + s][upLeftY] != sameDigit || mt[upLeftX + s][upLeftY + k] != sameDigit) {
return false;
}
}
return true;
}
int biggestSquare(int sizeX, int sizeY, short int mt[MAX_SIZE][MAX_SIZE]) {
int max = 1;
for (int i = 1; i <= sizeX - max; ++i) {
for (int j = 1; j <= sizeY - max; ++j) {
for (int k = max; i + k <= sizeX && j + k <= sizeY; ++k) {
if (is_square(i, j, k, mt)) {
max = k + 1;
}
}
}
}
return max;
}
int main() {
int sizeX, sizeY;
short int mt[MAX_SIZE][MAX_SIZE];
cin >> sizeX >> sizeY;
for (int i = 1; i <= sizeX; ++i) {
for(int j = 1; j <= sizeY; ++j) {
cin >> mt[i][j];
}
}
cout << biggestSquare(sizeX, sizeY, mt);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmNvbnN0IGludCBNQVhfU0laRSA9IDEwMDA7CiAKYm9vbCBpc19zcXVhcmUoaW50IHVwTGVmdFgsIGludCB1cExlZnRZLCBpbnQgaywgc2hvcnQgaW50IG10W01BWF9TSVpFXVtNQVhfU0laRV0pIHsKCWludCBzYW1lRGlnaXQgPSBtdFt1cExlZnRYXVt1cExlZnRZXTsKCWZvciAoaW50IHMgPSAxOyBzIDw9IGs7ICsrcykgewoJCWJvb2wgZXF1YWxzID0gbXRbdXBMZWZ0WF1bdXBMZWZ0WSArIHNdICE9IHNhbWVEaWdpdCB8fCBtdFt1cExlZnRYICsga11bdXBMZWZ0WSArIHNdICE9IHNhbWVEaWdpdDsKCQlpZiAoZXF1YWxzIHx8IG10W3VwTGVmdFggKyBzXVt1cExlZnRZXSAhPSBzYW1lRGlnaXQgfHwgbXRbdXBMZWZ0WCArIHNdW3VwTGVmdFkgKyBrXSAhPSBzYW1lRGlnaXQpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCX0KCXJldHVybiB0cnVlOwp9CmludCBiaWdnZXN0U3F1YXJlKGludCBzaXplWCwgaW50IHNpemVZLCBzaG9ydCBpbnQgbXRbTUFYX1NJWkVdW01BWF9TSVpFXSkgewoJaW50IG1heCA9IDE7Cglmb3IgKGludCBpID0gMTsgaSA8PSBzaXplWCAtIG1heDsgKytpKSB7CgkJZm9yIChpbnQgaiA9IDE7IGogPD0gc2l6ZVkgLSBtYXg7ICsraikgewoJCQlmb3IgKGludCBrID0gbWF4OyBpICsgayA8PSBzaXplWCAmJiBqICsgayA8PSBzaXplWTsgKytrKSB7CgkJCQlpZiAoaXNfc3F1YXJlKGksIGosIGssIG10KSkgewoJCQkJCW1heCA9IGsgKyAxOwoJCQkJfQoJCQl9CgkJfQoJfQoJcmV0dXJuIG1heDsKfQogCmludCBtYWluKCkgewoJaW50IHNpemVYLCBzaXplWTsKCXNob3J0IGludCBtdFtNQVhfU0laRV1bTUFYX1NJWkVdOwoJY2luID4+IHNpemVYID4+IHNpemVZOwoJZm9yIChpbnQgaSA9IDE7IGkgPD0gc2l6ZVg7ICsraSkgewoJCWZvcihpbnQgaiA9IDE7IGogPD0gc2l6ZVk7ICsraikgewoJCQljaW4gPj4gbXRbaV1bal07CgkJfQoJfQoJY291dCA8PCBiaWdnZXN0U3F1YXJlKHNpemVYLCBzaXplWSwgbXQpOwoJcmV0dXJuIDA7Cn0K
MTEgMTAKNgkzCTQJMAk5CTcJMwk2CTUJOAo2CTkJNAkzCTIJOAkyCTYJOAk3CjQJNQk1CTUJOAkxCTAJNwkxCTAKMAkxCTAJMAkwCTAJMAk5CTcJOQo4CTMJMAk0CTAJNQkwCTcJMgkwCjcJOQkwCTAJMAk2CTAJNQkxCTUKMgk0CTAJNAk4CTkJMAk3CTIJOAo0CTIJMAkwCTAJMAkwCTUJNQk2CjgJMgkxCTYJNwk3CTgJNgk2CTgKMgkzCTQJMQk4CTAJNgk1CTgJMAo4CTcJNwkyCTMJMAkzCTIJNQk4
11 10
6 3 4 0 9 7 3 6 5 8
6 9 4 3 2 8 2 6 8 7
4 5 5 5 8 1 0 7 1 0
0 1 0 0 0 0 0 9 7 9
8 3 0 4 0 5 0 7 2 0
7 9 0 0 0 6 0 5 1 5
2 4 0 4 8 9 0 7 2 8
4 2 0 0 0 0 0 5 5 6
8 2 1 6 7 7 8 6 6 8
2 3 4 1 8 0 6 5 8 0
8 7 7 2 3 0 3 2 5 8