#include <bits/stdc++.h>
#define maxn 1100
using namespace std;
//ll da li treba proveri
int n, m;
vector<string> s(maxn);
vector<vector<int>> vatra, steva;
bool provera(int x, int y) {
    return (x>=0 && y>=0 && x<n && y<m && s[x][y]!='*');
}
void ZaVatru(queue<pair<int, int>>& q) {
    while (!q.empty()) {
        pair<int, int> tr=q.front();
        q.pop();
        for (int i=0; i<4; i++) {
            int x=tr.first, y=tr.second;
            if (i==0) x++;
            if (i==1) x--;
            if (i==2) y++;
            if (i==3) y--;
            if (provera(x, y) && vatra[x][y]==(INT_MIN)) {
                vatra[x][y] = vatra[tr.first][tr.second]+1;
                q.push({x, y});
            }
        }
    }
}
//pokusaj da sklopis u jedan Za !!
void ZaStevu(pair<int, int> pocetak) {
    queue<pair<int, int>> q;
    q.push(pocetak);
    steva[pocetak.first][pocetak.second]=0;
    while (!q.empty()) {
        auto tr=q.front();
        q.pop();
        for (int i=0; i<4; i++) {
            int x=tr.first, y=tr.second;
            if (i==0) x++;
            if (i==1) x--;
            if (i==2) y++;
            if (i==3) y--;
            if (provera(x, y) && steva[x][y]==INT_MIN && (vatra[x][y]==INT_MIN || steva[tr.first][tr.second]+1<vatra[x][y])) {
                steva[x][y]=steva[tr.first][tr.second]+1;
                q.push({x, y});
            }
        }
    }
}

int main() {
    cin.tie(0);
    //cout.tie(0);
    ios::sync_with_stdio(0);
    cin >> n >> m;
    vatra.assign(n, vector<int>(m, INT_MIN));//da lo mozes globalno da prebacis oba assigna
    steva.assign(n, vector<int>(m, INT_MIN));
    queue<pair<int, int>> vatra_pocetak;
    pair<int, int> steva_pocetak;
    for (int i=0; i<n; i++) {
        cin >> s[i];
        for (int j=0; j<m; j++) {
            if (s[i][j]=='S') {
                steva_pocetak={i, j};
                steva[i][j]=0;
            }
            if (s[i][j]=='X') {
                vatra_pocetak.push({i, j});
                vatra[i][j]=0;
            }
        }
    }
    ZaVatru(vatra_pocetak);
    ZaStevu(steva_pocetak);
    int br=0;
    for (int i=0; i<n; i++) {
        for (int j=0; j<m; j++) {
            if (s[i][j]=='.' && steva[i][j]!=(INT_MIN) && (vatra[i][j]==(INT_MIN) || steva[i][j]<vatra[i][j])) {
                br++;
            }
        }
    }
    br++;
    cout << br << '\n';
    return 0;
}
//probaj sa strukturama???