#include<bits/stdc++.h>

using namespace std;

int N, M;
string in[1000];
int dp[1000][1000];
long long answer;

void appendResult() {
    for (int r = 0; r < N; ++r)
        for (int c = 0; c < M; ++c)
            answer += dp[r][c] - 1;
}

int main() {
    // get input
    cin >> N >> M;
    for (int r = 0; r < N; ++r)
        cin >> in[r];

    // left up
    for (int r = 0; r < N; ++r)
        for (int c = 0; c < M; ++c)
            if (r == 0 || c == 0)
                dp[r][c] = 1;
            else if (in[r][c] == in[r][c-1] && in[r][c] == in[r-1][c])
                dp[r][c] = min(dp[r][c-1], dp[r-1][c]) + 1;
            else
                dp[r][c] = 1;
    appendResult();

    // up right
    for (int r = 0; r < N; ++r)
        for (int c = M - 1; c >= 0; --c)
            if (r == 0 || c == M - 1)
                dp[r][c] = 1;
            else if (in[r][c] == in[r][c+1] && in[r][c] == in[r-1][c])
                dp[r][c] = min(dp[r][c+1], dp[r-1][c]) + 1;
            else
                dp[r][c] = 1;
    appendResult();

    // right down
    for (int r = N - 1; r >= 0; --r)
        for (int c = M - 1; c >= 0; --c)
            if (r == N - 1 || c == M - 1)
                dp[r][c] = 1;
            else if (in[r][c] == in[r][c+1] && in[r][c] == in[r+1][c])
                dp[r][c] = min(dp[r][c+1], dp[r+1][c]) + 1;
            else
                dp[r][c] = 1;
    appendResult();

    // down left
    for (int r = N - 1; r >= 0; --r)
        for (int c = 0; c < M; ++c)
            if (r == N - 1 || c == 0)
                dp[r][c] = 1;
            else if (in[r][c] == in[r][c-1] && in[r][c] == in[r+1][c])
                dp[r][c] = min(dp[r][c-1], dp[r+1][c]) + 1;
            else
                dp[r][c] = 1;
    appendResult();

    // print result
    cout << answer << endl;

}
