#include <bits/stdc++.h>

using namespace std;

int N,M;
vector<vector<char>> matrica(10003);
queue<pair<int,int>> queue_vatra;
queue<pair<int,int>> queue_steva;

long long caught = 0;

bool je_Vatra(int x, int y){
    if(x!= -1 && x != N && y != -1 && y != M) {
        if(matrica[x][y] == 'X'){
            return true;
        }
    }
    return false;
}
void spread_steva(int x, int y){
    if(x!= -1 && x != N && y != -1 && y != M) {
        if(je_Vatra(x+1,y) == false && je_Vatra(x-1, y) == false && je_Vatra(x,y+1) == false && je_Vatra(x, y-1) == false){
            if(matrica[x][y] == '.') {
                queue_steva.push({x,y});
                matrica[x][y] = 'S';
            }
        }
    }
}
void spread_vatra(int x, int y){
    if(x!= -1 && x != N && y != -1 && y != M) {
        if(matrica[x][y] == '.') {
            queue_vatra.push({x,y});
            matrica[x][y] = 'X';
        }
    }
}
void solve(){
    queue<pair<int,int>> steva_temp;
    queue<pair<int,int>> vatra_temp;
    while(!queue_steva.empty()) {
        steva_temp = queue_steva;
        while (!steva_temp.empty()) {
            spread_steva(steva_temp.front().first+1,steva_temp.front().second);
            spread_steva(steva_temp.front().first-1,steva_temp.front().second);
            spread_steva(steva_temp.front().first,steva_temp.front().second+1);
            spread_steva(steva_temp.front().first,steva_temp.front().second-1);
            queue_steva.pop();
            steva_temp.pop();
        }
        vatra_temp = queue_vatra;
        while (!vatra_temp.empty()) {
            spread_vatra(vatra_temp.front().first+1,vatra_temp.front().second);
            spread_vatra(vatra_temp.front().first-1,vatra_temp.front().second);
            spread_vatra(vatra_temp.front().first,vatra_temp.front().second+1);
            spread_vatra(vatra_temp.front().first,vatra_temp.front().second-1);
            queue_vatra.pop();
            vatra_temp.pop();
        }
    }
}
int main(){
    ios_base::sync_with_stdio(false);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> N >> M;
    for(int i = 0; i < N; i++) {
        string s;
        cin >> s;
        for(int k = 0; k < M; k++) {
            matrica[i].push_back(s[k]);
            if(s[k] == 'S') {
                queue_steva.push({i,k});
            }
            else if (s[k] == 'X'){
                queue_vatra.push({i,k});
            }
        }
    }
    solve();
    long long Ses = 0;
    for(int i = 0; i < N; i++) {
        for(int k = 0; k < M; k++) {
            if(matrica[i][k] == 'S') {
                Ses++;
            }
        }
    }
    cout << Ses << endl;
}