#include <bits/stdc++.h>
using namespace std;
void gotov(long long int broj) 
{
    cout<<broj;
    exit(0);  
}

int main()
{
    long long int n,m,i,j,br=0;
    bool radi=true;  
    cin>>n>>m;
    char polje[n][m]; //char - za znakove,slova

    for(i=0;i<n;i++) 
        for(j=0;j<m;j++) 
            cin>>polje[i][j]; // unos

   
    while(radi) 
	{
        bool changed=false;// predpostavljamo da se nije menjala  
        vector<pair<int, int>> vatra;  // vektorsko ozncavanje pozicija vatre i steve
        vector<pair<int, int>> stevo;  

        for(i=0;i<n;i++)
		{
            for(j=0;j<m;j++)
			{
                if(polje[i][j] == 'X')
				vatra.push_back({i, j}); //ako vatra naleti na vatru
				
                if (polje[i][j] == 'S') 
                stevo.push_back({i, j}); //ako stevo naleti na vatru nece se pomerati taj s
            }
        }

        for(auto pos : vatra)    // odredjivanje gde vatra moze da se pomera 
		{
            i=pos.first;       // ne moze da ide levo ili desno ako ne postoji to mesto
            j=pos.second;      // ne moze da ide gore ili dole ako ne postoji to mesto
            if(i>0 && polje[i-1][j] == '.')
			{
                polje[i-1][j] ='X';
                changed=true;
            }
            if (i<n-1 && polje[i+1][j] == '.') {
                polje[i+1][j] ='X';
                changed=true;
            }
            if (j>0 && polje[i][j-1] == '.') {
                polje[i][j-1] = 'X';
                changed=true;
            }
            if (j<m-1 && polje[i][j+1] == '.') {
                polje[i][j+1] = 'X';
                changed=true;
            }
        }

    
        for (auto pos : stevo) //isto vazi za stevu
		{   
            i=pos.first;
            j=pos.second;
            if ((i>0 && polje[i-1][j] == 'X') || (i<n-1 && polje[i+1][j] == 'X') ||  (j>0 && polje[i][j-1] == 'X') ||  (j<m-1 && polje[i][j+1] == 'X'))
            gotov(br);   //ako je neko od sledecih polja na koje s ide = x onda ne moze da ide dalje, br se poceva i ispisuje

      
            if (i>0 && polje[i-1][j] == '.') 
			{
                polje[i-1][j] = 'S';
                br++;  
                changed=true;
            }
            if (i<n-1 && polje[i+1][j] == '.') 
			{
                polje[i+1][j] = 'S';
                br++; 
                changed = true;
            }
            if (j>0 && polje[i][j-1] == '.') 
			{
                polje[i][j-1] = 'S';
                br++;  
                changed = true;
            }
            if (j<m-1 && polje[i][j+1] == '.') 
			{
                polje[i][j+1] = 'S';
                br++;  
                changed = true;
            }
        }

        
        if (!changed) //ako se nista nije promenilo znaci da ne moze vise s da se postavlja pa program vise ne radi i ispisuje se
        radi = false;
    }
    cout<<br+1<<endl;
}