#include <bits/stdc++.h>
#define endl '\n'
#define int long long

using namespace std;

const int INF=numeric_limits<int>::max();

int32_t main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int n,m;
    cin>>n>>m;
    vector<vector<int>> vat(n+2);
    vector<vector<int>> mp(n+2);

    for(int i=0;i<n+2;i++){
        vat[i].resize(m+2,INF);
        mp[i].resize(m+2,INF);
    }
    for(int i=0;i<m+2;i++){
        vat[0][i]=-1;
        vat[n+1][i]=-1;
        mp[0][i]=-1;
        mp[n+1][i]=-1;
    }
    for(int i=0;i<n+2;i++){
        vat[i][0]=-1;
        vat[i][m+1]=-1;
        mp[i][0]=-1;
        mp[i][m+1]=-1;
    }

    int sx=0;
    int sy=0;
    queue<pair<int,int>> q;

    for(int i=1;i<n+1;i++){
        for(int j=1;j<m+1;j++){
            char c;cin>>c;
            if(c=='*'){
                vat[i][j]=-1;
                mp[i][j]=-1;
            }
            else if(c=='S'){
                sx=i;sy=j;
                mp[i][j]=0;
            }
            else if(c=='X'){
                q.push(make_pair(i,j));
                vat[i][j]=0;
            }

        }
    }


    while(!(q.empty())){
        pair<int,int> p=q.front();
        q.pop();
        int i=p.first;
        int j=p.second;
        if(vat[i][j+1]!=-1 && vat[i][j]+1<vat[i][j+1]){
            q.push(make_pair(i,j+1));
            vat[i][j+1]=vat[i][j]+1;
        }
        if(vat[i][j-1]!=-1 && vat[i][j]+1<vat[i][j-1]){
            q.push(make_pair(i,j-1));
            vat[i][j-1]=vat[i][j]+1;
        }
        if(vat[i+1][j]!=-1 && vat[i][j]+1<vat[i+1][j]){
            q.push(make_pair(i+1,j));
            vat[i+1][j]=vat[i][j]+1;
        }
        if(vat[i-1][j]!=-1 && vat[i][j]+1<vat[i-1][j]){
            q.push(make_pair(i-1,j));
            vat[i-1][j]=vat[i][j]+1;
        }

    }
/*
    for(int i=0;i<n+2;i++){
        for(int j=0;j<m+2;j++){
            cout<<vat[i][j]<<' ';
        }
        cout<<endl;
    }

*/
    q.push(make_pair(sx,sy));
    while(!(q.empty())){
        pair<int,int> p=q.front();
        q.pop();
        int i=p.first;
        int j=p.second;
        if(mp[i][j+1]!=-1 && mp[i][j]+1<mp[i][j+1]){
            q.push(make_pair(i,j+1));
            mp[i][j+1]=mp[i][j]+1;
        }
        if(mp[i][j-1]!=-1 && mp[i][j]+1<mp[i][j-1]){
            q.push(make_pair(i,j-1));
            mp[i][j-1]=mp[i][j]+1;
        }
        if(mp[i+1][j]!=-1 && mp[i][j]+1<mp[i+1][j]){
            q.push(make_pair(i+1,j));
            mp[i+1][j]=mp[i][j]+1;
        }
        if(mp[i-1][j]!=-1 && mp[i][j]+1<mp[i-1][j]){
            q.push(make_pair(i-1,j));
            mp[i-1][j]=mp[i][j]+1;
        }

    }

    int ans=0;
    for(int i=1;i<n+1;i++){
        for(int j=1;j<m+1;j++){
            if(mp[i][j]<vat[i][j])ans++;
        }
    }
    cout<<ans<<endl;



    return 0;
}