#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int m, n;
    cin >> m >> n;

    vector<vector<int>> mat(m, vector<int>(n));

    // Nhập ma trận
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < n; ++j) {
            cin >> mat[i][j];
        }
    }

    vector<vector<int>> dp(m, vector<int>(n, 0));
    int maxSide = 0;

    // Tính toán dp
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < n; ++j) {
            if (i == 0 || j == 0) {
                dp[i][j] = mat[i][j];
            } else if (mat[i][j] == mat[i-1][j] && mat[i][j] == mat[i][j-1] && mat[i][j] == mat[i-1][j-1]) {
                dp[i][j] = min({dp[i-1][j], dp[i][j-1], dp[i-1][j-1]}) + 1;
            } else {
                dp[i][j] = mat[i][j];
            }
            maxSide = max(maxSide, dp[i][j]);
        }
    }

    cout << maxSide * maxSide << endl;

    return 0;
}