#include using namespace std; typedef long long ll; int n, m; vector > input; long long ans(vector > &v){ ll res = 0; /*for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ cout << v[i][j] << " "; } cout << endl; }*/ vector > prev(n, vector (m, 1)); for(int j = m-1; j >= 0; j--){ for(int i = n-2; i >= 0; i--){ if(input[i][j] == input[i+1][j]) prev[i][j] = min(prev[i+1][j]+1, v[i][j]); if(prev[i][j] > 1) res += prev[i][j] - 1; } } // cout << res << endl; return res; } int main(){ scanf("%d%d ", &n, &m ); //cout << n << " " << m << endl; char c; input.resize(n); for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ scanf("%c ", &c); input[i].push_back(c); } } /* for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ cout << input[i][j] << " "; } cout << endl; }*/ vector > v; v.resize(0); v.resize(n, vector (m, 1)); for(int i = 0; i < n; i++){ for(int j = m-2; j >= 0; j--){ if(input[i][j] == input[i][j+1]) v[i][j] += v[i][j+1]; } } ll res = ans(v); for(int i = 0; i < n; i++){ for(int j = 0; j < m/2; j++) swap(input[i][j], input[i][m-1-j]); } v.resize(0); v.resize(n, vector (m, 1)); for(int i = 0; i < n; i++){ for(int j = m-2; j >= 0; j--){ if(input[i][j] == input[i][j+1]) v[i][j] += v[i][j+1]; } } res += ans(v); for(int i = 0; i < n/2; i++){ for(int j = 0; j < m; j++){ swap(input[i][j], input[n-1-i][j]); } } v.resize(0); v.resize(n, vector (m, 1)); for(int i = 0; i < n; i++){ for(int j = m-2; j >= 0; j--){ if(input[i][j] == input[i][j+1]) v[i][j] += v[i][j+1]; } } res += ans(v); for(int i = 0; i < n; i++){ for(int j = 0; j < m/2; j++) swap(input[i][j], input[i][m-1-j]); } v.resize(0); v.resize(n, vector (m, 1)); for(int i = 0; i < n; i++){ for(int j = m-2; j >= 0; j--){ if(input[i][j] == input[i][j+1]) v[i][j] += v[i][j+1]; } } res += ans(v); cout << res << endl; return 0; }