```cpp
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int a[105][105];
int pre[105][105];
int main() {
#ifndef ONLINE_JUDGE
freopen("square.in","r",stdin);
freopen("square.out","w",stdout);
#endif
ios::sync_with_stdio(0);
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
pre[i][j] = pre[i][j - 1] + a[i][j];
}
}
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= m; j++) {
pre[i][j] = pre[i][j] + pre[i - 1][j];
}
}
int ans = 0;
for (int len = 1; len <= min(n, m); len++) {
for (int i = 1; i <= n - len + 1; i++) {
for (int j = 1; j <= m - len + 1; j++) {
if (pre[i + len - 1][j + len - 1] - pre[i + len - 1][j - 1] - pre[i - 1][j + len - 1] + pre[i - 1][j - 1] == len * len) ans = max(ans, len);
}
}
}
cout << ans << endl;
return 0;
}
```
by int_stl @ 2022-11-05 15:50:01