using System;
using static System.Console;

class Program
{
    static void Main()
    {
        //////////////////////////podatci
        int N, M;
        char[,] lavr;
        int[,] vvreme;
        int[,] svreme;
        int[] xsmer = { -1, 1, 0, 0 };
        int[] ysmer = { 0, 0, -1, 1 };

        var dim = ReadLine().Split();     
        N = int.Parse(dim[0]);
        M = int.Parse(dim[1]);
        int xsteva = 0, ysteva = 0;
        lavr = new char[N, M];
        vvreme = new int[N, M];
        svreme = new int[N, M];
        //////////////////////////podatci



        for (int i = 0; i < N; i++)
        {

            var linija = ReadLine();
            for (int j = 0; j < M; j++)
            {
                lavr[i, j] = linija[j];
                vvreme[i, j] = int.MaxValue;
                svreme[i, j] = int.MaxValue;

                //citac
                if (lavr[i, j] == 'X')
                {
                    vvreme[i, j] = 0;
                }
                else 
                if (lavr[i, j] == 'S')
                {
                    xsteva = i;
                    ysteva = j;
                    svreme[i, j] = 0;    //W
                }
            }
        }

        
        bool promena = true;
        while (promena){
            promena = false;
            
            for (int i = 0; i < N; i++)           // sirenje vatre
            {
                for (int j = 0; j < M; j++)
                {
                    if (vvreme[i, j] != int.MaxValue)
                    {

                        for (int k = 0; k < 4; k++)
                        {
                            int nx = i + xsmer[k], ny = j + ysmer[k];
                            if (nx >= 0 && ny >= 0 && nx < N && ny < M && 
                                lavr[nx, ny] == '.' && vvreme[nx, ny] == int.MaxValue)
                            {

                                vvreme[nx, ny] = vvreme[i, j] + 1;
                                promena = true;
                            }
                        }
                    }
                }
            }
        }

        


        promena = true;
        while (promena) {
            promena = false;
            for (int i = 0; i < N; i++)                      // sirenje steve
            {
                for (int j = 0; j < M; j++)
                {
                    if (svreme[i, j] != int.MaxValue)
                    {

                        for (int k = 0; k < 4; k++)
                        {
                            int nx = i + xsmer[k], ny = j + ysmer[k];
                            if (nx >= 0 && ny >= 0 && nx < N && ny < M && 
                                lavr[nx, ny] == '.' && svreme[nx, ny] == int.MaxValue)
                            {

                                svreme[nx, ny] = svreme[i, j] + 1;
                                promena = true;
                            }
                        }
                    }
                }
            }
        }

        
        int praz = 0;
        for (int i = 0; i < N; i++)                   // prebrojavanje
        {
            for (int j = 0; j < M; j++)
            {
                if ((lavr[i, j] == '.' || lavr[i, j] == 'S') && svreme[i, j] < vvreme[i, j])
                {praz++;}
            }
        }
        WriteLine(praz);
    }
}