// Source: https://usaco.guide/general/io
#include <bits/stdc++.h>
#include <sys/types.h>
using namespace std;
#define int long long
const int N=3*1e5, M=21;
int pre1[N], pre2[N];
//int arr[N];
int dp2[2];
int dp[N];
//int cnt[N],p[N];
const int mod=1e9+7;
int k,max2,m;
int sum=1,ans=0;;
string s,s1;
set<int> st;
bool check=true;
vector<int> nums2;
int O[3005][3005],I[3005][3005];
signed main(){
int n,t,n1,q,m;
//int c,d,x1,y1,l,r,sum,g,i,k,k1,g1,g2,e,b,u,v,a;
t=1; //cin>>t;
while (t>0){
t--;
cin>>n>>m;
string arr[n+5];
for (int i=0; i<n; i++){
cin>>arr[i];
}
int x=0;
for (int i=0; i<n; i++){
x=0;
for (int j=0; j<m; j++){
if (arr[i][j]=='O') x++;
O[i][j]=x;
}
}
int y=0;
for (int j=0; j<m; j++){
y=0;
for (int i=0; i<n; i++){
if (arr[i][j]=='I') y++;
I[j][i]=y;
}
}
ans=0;
for (int i=0; i<n; i++){
for (int j=0; j<m; j++){
if (arr[i][j]=='J'){
ans=ans+(O[i][m-1]-O[i][j])*(I[j][n-1]-I[j][i]);
//cout<<"A";
}
}
}
//cout<<O[0][1]; return 0;
// int i=1;
// int j=0;
// cout<<(O[i][m-1]-O[i][j])*(I[j][n-1]-I[j][i]); return 0;
cout<<ans;
}
}