#include <bits/stdc++.h>
using namespace std;

int  dy[4] = { -1,  0,  1,   0};
int  dx[4] = {  0,  1,  0,  -1};
int cntx=0,res=1;
char mat[1005][1005];
int n,m,xs,ys;
int bfsniz[1000000][2];
void bfs(){
    queue <int> qx,qy;
    if(cntx>0){
        for(int i=1;i<=cntx;i++){
            qx.push(bfsniz[i][1]);
            qy.push(bfsniz[i][2]);
        }
    }
    qx.push(xs);
    qy.push(ys);
    while(qx.size()){
        int x, y;
        x=qx.front();
        y=qy.front();
        if(mat[x][y]=='S'){
            for(int l=0;l<4;l++){
                if(mat[x+dx[l]][y+dy[l]]=='.'){
                    qx.push(x+dx[l]);
                    qy.push(y+dy[l]);
                    mat[x+dx[l]][y+dy[l]]='S';
                    res++;
                }
            }
        }
        else{
            for(int l=0;l<4;l++){
                if(mat[x+dx[l]][y+dy[l]]=='.' or mat[x+dx[l]][y+dy[l]]=='S'){
                    qx.push(x+dx[l]);
                    qy.push(y+dy[l]);
                    mat[x+dx[l]][y+dy[l]]='X';
                }
            }
        }
        qx.pop();
        qy.pop();
    }
}

int main(){

    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> n >> m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin >> mat[i][j];
            if(mat[i][j]=='X'){
                cntx++;
                bfsniz[cntx][1]=i;
                bfsniz[cntx][2]=j;
            }
            else if(mat[i][j]=='S'){xs=i;ys=j;}
        }
    }
    bfs();
    cout << res << endl;

return 0;
}