#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<n&&j>=0&&j<m);
    
}

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 main() {
    int n,m;
    char vreme[1005][1005];
    cin>>n>>m;
    char matrica[1005][1005];
    int br=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};
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>matrica[i][j];
            vreme[i][j]==matrica[i][j];
            if(matrica[i][j]=='S'){
                lik.push({{i,j},0});
            }
            else if(matrica[i][j]=='X'){
                vatra.push({{i,j},0});
            }
            
        }
    }
    
    if(vatra.empty()==true){
        cout<<n*m<<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,n,m)&&nijeZidIliVatra(novaKolona,novRed,matrica)==1){
                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 closedIn=0;
    while(!lik.empty()){
        //cout<<"test2"<<endl;
        int kolonaTr=lik.front().first.first;
        int redTr=lik.front().first.second;
        int tLik=lik.front().second;
        lik.pop();
        //cout<<kolonaTr<<" "<<redTr;
        for(int i=0;i<4;i++){
            
            int novaKolona=kolonaTr+kolona[i];
            int novRed=redTr+red[i];
            
            if(nijeVoid(novaKolona,novRed,n,m)&&nijeZidiliLik(novaKolona,novRed,matrica)==1){
                
                if(matrica[novaKolona][novRed]=='.'){
                    closedIn=1;
                    br++;
                }
                
                matrica[novaKolona][novRed]='S';
                //cout<<"test3"<<endl;
                lik.push({{novaKolona,novRed},tLik+1});
                //cout<<" \n"<<vreme[kolonaTr][redTr];
                //cout<<lik.front().first.first<<" "<<lik.front().first.second<<" ";
                if(tLik+1<vreme[novaKolona][novRed]){
                    
                    br++;
                    //cout<<"tes"<<endl;
                    
                }
                else{
                    break;
                }
                
            }
            
        }
        
    }
    /*
    for(int i=0;i<n;i++){
        cout<<"\n";
        for(int j=0;j<m;j++){
            cout<<matrica[i][j];
        }
    }
    cout<<endl;*/
    
    if(closedIn==1){
        cout<<br+1<<endl;
    }
    else
        cout<<br<<endl;
    
    
    return 0;
}