#include <bits/stdc++.h>
using namespace std;
int n,m;
char polje[1001][1001];
int dolazakVatre[1001][1001];
int dolazakSteve[1001][1001];
pair <int,int> x[1000000];
int brx=0;
pair <int,int> steva;
int najblizeX(int a,int b)
{

    int rastojanje=1000;
    for(int i=0;i<brx;i++)
    {
//        if(abs(x[i].first-a)==1 && abs(x[i].second-b) == 1) rastojanje=min(rastojanje,1);

      rastojanje=min(rastojanje,abs(x[i].first-a)+abs(x[i].second-b));
    }
    return rastojanje;
}
int rastojanjeSteve(int a,int b)
{
//    if(abs(steva.first-a)== 1 && abs(steva.second - b)== 1) return 1;
    return abs(steva.first-a) + abs(steva.second -b);

}
int main()
{
    cin >> n >> m;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin >> polje[i][j];
            if(polje[i][j]=='.') {
            dolazakVatre[i][j]=0;
            dolazakSteve[i][j]=0;
            }
            if(polje[i][j]=='S') {
                    steva.first=i;
                    steva.second=j;
                 dolazakVatre[i][j]=-1;
                dolazakSteve[i][j]=0; //odavde krece steva
            }

            if(polje[i][j]=='*') {
                    dolazakSteve[i][j]=-2;
                    dolazakVatre[i][j]=-2; // zid
            }
    }

    }
    for(int i=0;i<n;i++)
    {
     for(int j=0;j<m;j++){

     if(polje[i][j]=='X')
            {
                dolazakVatre[i][j]=0;
                x[brx].first=i;
                x[brx].second=j;
                brx++; //tu se nalazi vatra;
     }
    }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(polje[i][j]=='.')
            dolazakVatre[i][j]=najblizeX(i,j);
            dolazakSteve[i][j]=rastojanjeSteve(i,j);

        }
    }
    int rezultat=1;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(polje[i][j]=='.' && dolazakSteve[i][j]<dolazakVatre[i][j])
                rezultat++;

        }
    }
    cout << rezultat << endl;
    return 0;
}