#include<bits/stdc++.h>
typedef unsigned long long ull;
using namespace std;
const int MAXN = 1e3 + 10;
int n, m, a[MAXN][MAXN], tot_ans;
bool check(int cx, int cy, int len){
for(int i = 0; i < len; i++){
for(int j = 0; j < len; j++){
if(a[cx + i][cy + j] != a[cx + len - 1 - i][cy + j] ||
a[cx + i][cy + j] != a[cx + i][cy + len - 1 - j]){
return 0;
}
}
}
return 1;
}
int main(){
cin >> n >> m;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cin >> a[i][j];
}
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
int l = 1, r = min(min(i, j), min(n - i + 1, m - j + 1));
int ans = 0;
while(l <= r){
int mid = l + r >> 1;
if(check(i + mid - 1, j + mid - 1, (mid << 1) - 1))
ans = mid, l = mid + 1;
else
r = mid - 1;
}
tot_ans += ans;
l = 1, r = min(min(i, j), min(n - i, m - j));
ans = 0;
while(l <= r){
int mid = l + r >> 1;
if(check(i + mid, j + mid, (mid << 1)))
ans = mid, l = mid + 1;
else
r = mid - 1;
}
tot_ans += ans;
}
}
cout << tot_ans << '\n';
return 0;
}