#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
#define ld long double
const int inf=1e9;
int dx[4]={1,-1,0,0},dy[4]={0,0,-1,1};
int main(){
    int n,m;scanf("%i%i",&n,&m);
    string s[n+10];for(int i=0;i<n;i++) cin>>s[i];
	queue<pair<int,int>>kju;
	int tm[n+10][m+10];
	for(int i=0;i<n;i++) for(int j=0;j<m;j++) {tm[i][j]=inf;if(s[i][j]=='X')kju.push({i,j}),tm[i][j]=0;}
	while(!kju.empty()){
		int x=kju.front().fi,y=kju.front().se;kju.pop();
		for(int i=0;i<=3;i++){
			int X=x+dx[i],Y=y+dy[i];
			if(X<0||X>=n||Y<0||Y>=m||s[X][Y]=='*') continue;
			if(tm[X][Y]>tm[x][y]+1){
				tm[X][Y]=tm[x][y]+1;
				kju.push({X,Y});
			}
		}
	}
	int dist[n+10][m+10];for(int i=0;i<n;i++) for(int j=0;j<m;j++) {dist[i][j]=inf;if(s[i][j]=='S')kju.push({i,j}),dist[i][j]=0;}
	while(!kju.empty()){
		int x=kju.front().fi,y=kju.front().se;kju.pop();
		for(int i=0;i<=3;i++){
			int X=x+dx[i],Y=y+dy[i];
			if(X<0||X>=n||Y<0||Y>=m||s[X][Y]=='*'||tm[X][Y]<=dist[x][y]+1) continue;
			if(dist[X][Y]>dist[x][y]+1){
				dist[X][Y]=dist[x][y]+1;
				kju.push({X,Y});
			}
		}
	}
	int res=0;
	for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(dist[i][j]<inf) res++;
	printf("%i\n",res);
    return 0;
}