#include<bits/stdc++.h>
#define ll long long
#define MAXN 1007
#define x first
#define y second
using namespace std;
string l[MAXN];
ll sdist[MAXN][MAXN], vdist[MAXN][MAXN];
bool svisited[MAXN][MAXN], vvisited[MAXN][MAXN];
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int n, m;
    cin>>n>>m;
    for(int i=0;i<n;i++) cin>>l[i];

    queue<pair<int,int>>st;
    queue<pair<int,int>>v;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            sdist[i][j]=INT_MAX;
            vdist[i][j]=INT_MAX;
            svisited[i][j]=false;
            vvisited[i][j]=false;
            if(l[i][j] == 'S') 
            {
                st.push(make_pair(i,j));
                sdist[i][j]=0;
                svisited[i][j]=true;
            }
            if(l[i][j] == 'X') 
            {
                v.push(make_pair(i,j));
                vdist[i][j]=0;
                vvisited[i][j]=true;
            }
        }
    }
    // steva
    while(!st.empty())
    {
        pair<int,int>cur=st.front();
        st.pop();

        pair<int,int> p1(cur.x, cur.y-1), p2(cur.x, cur.y+1), p3(cur.x-1, cur.y), p4(cur.x+1, cur.y);

        if(p1.x>=0 && p1.x<n && p1.y>=0 && p1.y<m && !svisited[p1.x][p1.y] && l[p1.x][p1.y]!='*')
        {
            svisited[p1.x][p1.y]=true;
            st.push(p1);
            sdist[p1.x][p1.y]=sdist[cur.x][cur.y]+1;
        }
        if(p2.x>=0 && p2.x<n && p2.y>=0 && p2.y<m && !svisited[p2.x][p2.y] && l[p2.x][p2.y]!='*')
        {
            svisited[p2.x][p2.y]=true;
            st.push(p2);
            sdist[p2.x][p2.y]=sdist[cur.x][cur.y]+1;
        }
        if(p3.x>=0 && p3.x<n && p3.y>=0 && p3.y<m && !svisited[p3.x][p3.y] && l[p3.x][p3.y]!='*')
        {
            svisited[p3.x][p3.y]=true;
            st.push(p3);
            sdist[p3.x][p3.y]=sdist[cur.x][cur.y]+1;
        }
        if(p4.x>=0 && p4.x<n && p4.y>=0 && p4.y<m && !svisited[p4.x][p4.y] && l[p4.x][p4.y]!='*')
        {
            svisited[p4.x][p4.y]=true;
            st.push(p4);
            sdist[p4.x][p4.y]=sdist[cur.x][cur.y]+1;
        } 
    }
    //vatra
    while(!v.empty())
    {
        pair<int,int>cur=v.front();
        v.pop();

        pair<int,int> p1(cur.x, cur.y-1), p2(cur.x, cur.y+1), p3(cur.x-1, cur.y), p4(cur.x+1, cur.y);

        if(p1.x>=0 && p1.x<n && p1.y>=0 && p1.y<m && !vvisited[p1.x][p1.y] && l[p1.x][p1.y]!='*')
        {
            vvisited[p1.x][p1.y]=true;
            v.push(p1);
            vdist[p1.x][p1.y]=vdist[cur.x][cur.y]+1;
        }
        if(p2.x>=0 && p2.x<n && p2.y>=0 && p2.y<m && !vvisited[p2.x][p2.y] && l[p2.x][p2.y]!='*')
        {
            vvisited[p2.x][p2.y]=true;
            v.push(p2);
            vdist[p2.x][p2.y]=vdist[cur.x][cur.y]+1;
        }
        if(p3.x>=0 && p3.x<n && p3.y>=0 && p3.y<m && !vvisited[p3.x][p3.y] && l[p3.x][p3.y]!='*')
        {
            vvisited[p3.x][p3.y]=true;
            v.push(p3);
            vdist[p3.x][p3.y]=vdist[cur.x][cur.y]+1;
        }
        if(p4.x>=0 && p4.x<n && p4.y>=0 && p4.y<m && !vvisited[p4.x][p4.y] && l[p4.x][p4.y]!='*')
        {
            vvisited[p4.x][p4.y]=true;
            v.push(p4);
            vdist[p4.x][p4.y]=vdist[cur.x][cur.y]+1;
        } 
    }
    int cnt=0;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(sdist[i][j]<vdist[i][j]) cnt++;
        }
    }
    cout<<cnt<<endl;
}