#include <bits/stdc++.h>
using namespace std;
int N,M;
char mat[1037][1037];
int steve[1007][1007],poz[1007][1007],br;
int ii[4]={0,1,0,-1},jj[4]={1,0,-1,0};
queue <int> sj,si,vj,vi;
void bfss(){
    int i,j;
    while(si.size()){
        i=si.front();
        j=sj.front();
        for (int k=0;k<4;k++){
            if (!steve[i+ii[k]][j+jj[k]] && mat[i+ii[k]][j+jj[k]]!='*'){
                steve[i+ii[k]][j+jj[k]]=steve[i][j]+1;
                si.push(i+ii[k]);
                sj.push(j+jj[k]);
            }
        }
        sj.pop();
        si.pop();
    }
    return;
}
void bfsf(){
    int i,j;
    while(vi.size()){
        i=vi.front();
        j=vj.front();
        for (int k=0;k<4;k++){
            if (!poz[i+ii[k]][j+jj[k]] && mat[i+ii[k]][j+jj[k]]!='*'){
                poz[i+ii[k]][j+jj[k]]=poz[i][j]+1;
                vi.push(i+ii[k]);
                vj.push(j+jj[k]);
            }
        }
        vj.pop();
        vi.pop();
    }
    return;

}
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
   cin >> N >> M ;
   memset(steve, 1, sizeof(steve));
   memset(poz , 1, sizeof(poz));
   for (int i=1;i<=N;i++){
		for (int j=1;j<=M;j++){
			cin >> mat[i][j];
			steve[i][j]=0;
			poz[i][j]=0;
			if (mat[i][j]=='S'){
                steve[i][j]=1;
                si.push(i);
                sj.push(j);
			}
			if (mat[i][j]=='X'){
                poz[i][j]=1;
				vi.push(i);
				vj.push(j);
			}
		}
   }
    bfss();
    bfsf();
    for (int i=1;i<=N;i++){
        for(int j=1;j<=M;j++){
            if (steve[i][j]>0 && mat[i][j]!='*' && (steve[i][j]<poz[i][j] || poz[i][j]==0)){
                br++;
            }
        }
    }
    cout <<br <<endl;

	return 0;
}
/// 5 5 . . S . . . . . . . * * * * * . . . . . . . . . .