#include <bits/stdc++.h>
using namespace std;
int n, m, br;
char mat[1005][1005];
int dx[4]={-1, 1, 0, 0};
int dy[4]={0, 0, -1, 1};
struct kordinate{
    int x, y;
};
queue<kordinate>vatra,steva;
void vfs(queue<kordinate>&vatra){
    int v = vatra.size();
    while(v--){
        kordinate pom = vatra.front();
        vatra.pop();
        for(int i=0; i<4; i++){
            int nx = pom.x + dx[i];
            int ny = pom.y + dy[i];
            if(mat[nx][ny]=='.'){
                mat[nx][ny] = 'X';
                vatra.push({nx, ny});
            }
        }
    }
}
void sfs(queue<kordinate>&steva){
    int s = steva.size();
    while(s--){
        kordinate pom = steva.front();
        steva.pop();
        for(int i=0; i<4; i++){
            int nx = pom.x+dx[i];
            int ny = pom.y+dy[i];
            if (mat[nx][ny]=='.') {
                mat[nx][ny] = 'S';
                steva.push({nx, ny});
                br++;
            }
        }
    }
}
int main() {
    scanf("%d%d",&n,&m);
    for(int i=1; i<=n; i++){
        for(int j=1; j<=m; j++){
            cin>>mat[i][j];
            if(mat[i][j]=='S'){
                steva.push({i, j});
                mat[i][j] = '.';
            }
            else if(mat[i][j]=='X'){
                vatra.push({i, j});
            }
        }
    }
    while (!steva.empty()) {
        vfs(vatra);
        sfs(steva);
    }
    printf("%d",br);
    return 0;
}