#include using namespace std; typedef long long LL; const int N = 1e3 + 7; int n, m, T[4][N][N]; char S[N][N]; int main() { scanf("%d %d", &n, &m); for(int i = 1; i <= n; i++) { scanf(" %s", S[i] + 1); } LL ans = 0; for(int i = n; i; i--) { for(int j = m; j; j--) { T[0][i][j] = 1; if(i < n && j < m) { if(S[i][j] == S[i + 1][j] && S[i][j] == S[i][j + 1]) { T[0][i][j] += min(T[0][i + 1][j], T[0][i][j + 1]); } } ans += T[0][i][j] - 1; } } for(int i = n; i; i--) { for(int j = 1; j <= m; j++) { T[1][i][j] = 1; if(i < n && 1 < j) { if(S[i][j] == S[i + 1][j] && S[i][j] == S[i][j - 1]) { T[1][i][j] += min(T[1][i + 1][j], T[1][i][j - 1]); } } ans += T[1][i][j] - 1; } } for(int i = 1; i <= n; i++) { for(int j = m; j; j--) { T[2][i][j] = 1; if(1 < i && j < m) { if(S[i][j] == S[i - 1][j] && S[i][j] == S[i][j + 1]) { T[2][i][j] += min(T[2][i - 1][j], T[2][i][j + 1]); } } ans += T[2][i][j] - 1; } } for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { T[3][i][j] = 1; if(1 < i && 1 < j) { if(S[i][j] == S[i - 1][j] && S[i][j] == S[i][j - 1]) { T[3][i][j] += min(T[3][i - 1][j], T[3][i][j - 1]); } } ans += T[3][i][j] - 1; } } printf("%lld\n", ans); return 0; }