#include using namespace std; typedef unsigned long long int n_t; int main() { ios_base::sync_with_stdio(false); int n, m; cin >> n >> m; vector> vec(n, vector(m)); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cin >> vec[i][j]; } } vector> dp(n, vector(m)); n_t s = 0; for (int i = n - 2; i >= 0; --i) { for (int j = m - 2; j >= 0; --j) { auto bottom = vec[i + 1][j]; auto right = vec[i][j + 1]; if (bottom == right && bottom == vec[i][j]) { dp[i][j] = min(dp[i + 1][j], dp[i][j + 1]) + 1; s += dp[i][j]; } } } vector> dp2(n, vector(m)); for (int i = 1; i < n; ++i) { for (int j = 1; j < m; ++j) { auto top = vec[i - 1][j]; auto left = vec[i][j - 1]; if (top == left && top == vec[i][j]) { dp2[i][j] = min(dp2[i - 1][j], dp2[i][j - 1]) + 1; s += dp2[i][j]; } } } cout << s << endl; return 0; }