#include using namespace std; #define fi first #define se second #define mp make_pair #define pb push_back #define maxn 1011 typedef long long ll; char arr[maxn][maxn]; int dp[maxn][maxn]; int main(){ int n, m; ll ans = 0; scanf("%d %d\n", &n, &m); for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++) scanf("%c", arr[i] + j); scanf("\n"); } // for(int i = 0; i = 0; i--){ for(int j = m - 2; j >= 0; j--){ dp[i][j] = 0; if(arr[i][j] == cur && arr[i + 1][j] == cur && arr[i][j + 1] == cur) dp[i][j] = min(dp[i + 1][j], dp[i][j + 1]) + 1; ans += dp[i][j]; } } for(int i = 0; i < n; i++) dp[i][0] = 0; for(int i = 0; i < m; i++) dp[n - 1][i] = 0; for(int i = n - 2; i >= 0; i--){ for(int j = 1; j < m; j++){ dp[i][j] = 0; if(arr[i][j] == cur && arr[i + 1][j] == cur && arr[i][j - 1] == cur) dp[i][j] = min(dp[i + 1][j], dp[i][j - 1]) + 1; ans += dp[i][j]; } } for(int i = 0; i < n; i++) dp[i][0] = 0; for(int i = 0; i < m; i++) dp[0][i] = 0; for(int i = 1; i < n; i++){ for(int j = 1; j < m; j++){ dp[i][j] = 0; if(arr[i][j] == cur && arr[i - 1][j] == cur && arr[i][j - 1] == cur) dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + 1; ans += dp[i][j]; } } for(int i = 0; i < n; i++) dp[i][m - 1] = 0; for(int i = 0; i < m; i++) dp[0][i] = 0; for(int i = 1; i < n; i++){ for(int j = m - 2; j >= 0; j--){ dp[i][j] = 0; if(arr[i][j] == cur && arr[i - 1][j] == cur && arr[i][j + 1] == cur) dp[i][j] = min(dp[i - 1][j], dp[i][j + 1]) + 1; ans += dp[i][j]; } } } printf("%lld\n", ans); return 0; }