#include <bits/stdc++.h>
#include <vector>
#include<queue>
using namespace std;

int nijeVoid(int i,int j,int n,int m){
    
    return(i>=0&&i<m&&j>=0&&j<n);
    
}

int nijeZidIliVatra(int i,int j,char matrica[1005][1005]){
    
    if(matrica[i][j]=='*'||matrica[i][j]=='X'){
        return 0;
    }
    else
        return 1;
    
}

int nijeZidiliLik(int i,int j,char matrica[1005][1005]){
    
    if(matrica[i][j]=='*'||matrica[i][j]=='S'){
        return 0;
    }
    else
        return 1;
    
}
int vreme[1005][1005];
int vreme2[1005][1005];
//cout<<"test";

char matrica[1005][1005];

int main() {

    long long n,m;
    cin>>n>>m;

    int br=0;
    int brZid=0;
    queue<pair<pair<int,int>,int>> vatra;
    queue<pair<pair<int,int>,int>> lik;
    //int t=0;
    int red[4]={-1,0,1,0};
    int kolona[4]={0,1,0,-1};
    int brX=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>matrica[i][j];
            vreme[i][j]=1001;
            vreme2[i][j]=1001;
            if(matrica[i][j]=='S'){
                lik.push({{i,j},0});
                vreme2[i][j]=0;
            }
            else if(matrica[i][j]=='X'){
                vatra.push({{i,j},0});
                vreme[i][j]=0;
                brX++;
            }
            
            if(matrica[i][j]=='*')
                brZid++;
            
        }
    }
    
    if(brZid==n*m-1-brX){
        cout<<1<<endl;
        return 0;
    }
    
    while(!vatra.empty()){
        
        int kolonaTr=vatra.front().first.first;
        int redTr=vatra.front().first.second;
        int tN=vatra.front().second;
        vatra.pop();
        for(int i=0;i<4;i++){
            int novaKolona=kolonaTr+kolona[i];
            int novRed=redTr+red[i];
            if(nijeVoid(novaKolona,novRed,m,n)&&nijeZidIliVatra(novaKolona,novRed,matrica)==1&&vreme[novaKolona][novRed]==1001){
                matrica[novaKolona][novRed]='X';
                
                vatra.push({{novaKolona,novRed},tN+1});
                vreme[novaKolona][novRed]=tN+1;
            }
            
        }
        //cout<<"test2";
    }
    /*
    for(int i=0;i<n;i++){
        cout<<"\n";
        for(int j=0;j<m;j++){
            cout<<matrica[i][j];
        }
    }
    cout<<endl;*/
    
    //cout<<"test"<<endl;
    /*
    for(int i=0;i<n;i++){
        cout<<"\n";
        for(int j=0;j<m;j++){
            cout<<vreme[i][j]<<" ";
        }
    }
    cout<<endl;*/
    //cout<<"test"<<endl;
    //matrica[lik.front().first.first][lik.front().first.second]='S';
    //cout<<lik.front().second;
    int tacka=0;
    while(!lik.empty()){
        //cout<<"test2"<<endl;
        int kolonaTr2=lik.front().first.first;
        int redTr2=lik.front().first.second;
        int tLik=lik.front().second;
        //cout<<tLik;
        lik.pop();
        //cout<<kolonaTr<<" "<<redTr;
        //cout<<lik.front().second;
        for(int i=0;i<4;i++){
            
            int novaKolona2=kolonaTr2+kolona[i];
            int novRed2=redTr2+red[i];
            //cout<<lik.front().second;
            //cout<<nijeVoid;
            if(nijeVoid(novaKolona2,novRed2,m,n)&&nijeZidiliLik(novaKolona2,novRed2,matrica)==1&&vreme2[novaKolona2][novRed2]==1001){
  
                matrica[novaKolona2][novRed2]='S';
                //cout<<"test3"<<endl;
                lik.push({{novaKolona2,novRed2},tLik+1});
                vreme2[novaKolona2][novRed2]=tLik+1;
                //cout<<" \n"<<vreme[kolonaTr][redTr];
                //cout<<lik.front().first.first<<" "<<lik.front().first.second<<" ";
                
            }
            
        }
        
    }
    /*
    for(int i=0;i<n;i++){
        cout<<"\n";
        for(int j=0;j<m;j++){
            cout<<vreme2[i][j]<<" ";
        }
    }
    cout<<endl;*/
    
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            
            if(vreme2[i][j]<vreme[i][j]){
                br++;
            }
            
        }
    }
    
    
    //cout<<br<<endl;

    cout<<br<<endl;
    
    
    return 0;
}