#include <bits/stdc++.h>
using namespace std;
int n,m,br,a,b;
char mat[1010][1010];
int matS[1011][1011],matX[1011][1011];
queue <int> xx,yx;
int dr[4]={0, 1, 0, -1};
int dc[4]={1, 0, -1, 0};


void ispis(){


for(int i=1;i<=n;i++){

    for(int j=1;j<=m;j++){
        cout<<matS[i][j]<<"  ";
    }
    cout<<endl;
}

}


void bfsS(int r,int c){
	queue <int> xs,ys;
	xs.push(r);
	ys.push(c);


	while(xs.size()){
		r=xs.front();
		c=ys.front();

		for(int k=0; k<4; k++){
			if(mat[r+dr[k]][c+dc[k]]!='*' and matS[r+dr[k]][c+dc[k]]==-1){
				xs.push(r+dr[k]);
				ys.push(c+dc[k]);
				matS[r+dr[k]][c+dc[k]]=matS[r][c]+1;
			}
		}
		xs.pop();
		ys.pop();
	}

}




void bfsX(){
    int i,j;
    while(xx.size()){
        i=xx.front();
		j=yx.front();
		for(int t=0;t<4;t++){
			if(matX[i+dr[t]][j+dc[t]]==-1 and mat[i+dr[t]][j+dc[t]]!='*' ){
				xx.push(i+dr[t]);
				yx.push(j+dc[t]);
				matX[i+dr[t]][j+dc[t]]=matX[i][j]+1;
			}
		}
		xx.pop();
		yx.pop();
    }

}

int main(){

cin>>n>>m;

memset(mat,'*',sizeof(mat));
memset(matX,-1,sizeof(matX));
memset(matS,-1,sizeof(matS));

for(int i=1;i<=n;i++){
    for(int j=1;j<=m;j++){
        cin>>mat[i][j];

        if(mat[i][j]== 'S')
        {
            a=i;
            b=j;
            matS[i][j]=0;
        }

        if(mat[i][j]== 'X')
        {
            xx.push(i);
            yx.push(j);
            matX[i][j]=0;
        }

    }
}




bfsX();
  for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
           if(matX[i][j]==-1) {matX[i][j]=1000000000;}
        }
    }




bfsS(a,b);

for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
           if(matS[i][j]==-1) {matS[i][j]=1000000000;}
        }
    }
//ispis();

    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(matS[i][j]<matX[i][j]){br++;}
        }
    }





cout<<br<<endl;

return 0;
}