#include using namespace std; #define st first #define nd second typedef pair < int, int > PII; const int N = 1e3 + 7, M = 94 + 7; int A[N][N], Pref1[N][N][M], Pref2[N][N][M]; int n, m; int main () { scanf("%d %d", &n, &m); for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) { char c; scanf(" %c", &c); int letter = (int)(c - (char)33); A[i][j] = letter; } for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) { int letter = A[i][j]; for (int k = 0; k < M; ++k) Pref1[i][j][k] = Pref1[i - 1][j + 1][k], Pref2[i][j][k] = Pref2[i - 1][j - 1][k]; ++Pref1[i][j][letter]; ++Pref2[i][j][letter]; } int result = 0; for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) { int letter = A[i][j], d = 2; PII start = {i, j + 1}, finish = {i + 1, j}; while (start.nd <= m && finish.st <= n) { if (Pref1[finish.st][finish.nd][letter] - Pref1[start.st - 1][start.nd + 1][letter] == d) ++result; else break; ++d; ++finish.st; ++start.nd; } } for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) { int letter = A[i][j], d = 2; PII start = {i - 1, j}, finish = {i, j - 1}; while (start.st > 0 && finish.nd > 0) { if (Pref1[finish.st][finish.nd][letter] - Pref1[start.st - 1][start.nd + 1][letter] == d) ++result; else break; ++d; --finish.nd; --start.st; } } for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) { int letter = A[i][j], d = 2; PII start = {i, j - 1}, finish = {i + 1, j}; while (start.nd > 0 && finish.st <= n) { if (Pref2[finish.st][finish.nd][letter] - Pref2[start.st - 1][start.nd - 1][letter] == d) ++result; else break; ++d; ++finish.st; --start.nd; } } for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) { int letter = A[i][j], d = 2; PII start = {i - 1, j}, finish = {i, j + 1}; while (start.st > 0 && finish.nd <= m) { if (Pref2[finish.st][finish.nd][letter] - Pref2[start.st - 1][start.nd - 1][letter] == d) ++result; else break; ++d; ++finish.nd; --start.st; } } printf("%d", result); return 0; }