global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

namespace _c_pozar_hajmo_ponovo
{
    internal class Program
    {
        static void OkolnaPolja (int i, int j, int N, int M, out List<Tuple<int,int>> Polja)
        {
            Polja = new List<Tuple<int,int>>();

            // gore
            if (i + 1 < N) Polja.Add(new Tuple<int, int> (i + 1, j));
            // dole
            if (i - 1 >= 0) Polja.Add(new Tuple<int, int> (i - 1, j));
            // levo
            if (j - 1 >= 0) Polja.Add(new Tuple<int, int>(i, j - 1));
            // desno
            if (j + 1 < M) Polja.Add(new Tuple<int, int>(i, j + 1));
        }

        static void Main(string[] args)
        {
            // unos
            string[] ulaz1 = Console.ReadLine().Split(" ");
            int N = int.Parse(ulaz1[0]);
            int M = int.Parse(ulaz1[1]);

            string[,] mapa = new string[N, M];

            for (int i = 0; i < N; i++)
            {
                string ulaz2 = Console.ReadLine();
                for (int j = 0; j < M; j++)
                {
                    mapa[i, j] = Convert.ToString(ulaz2[j]);
                }
            }

            // obradjujemo

            bool kraj = false;
            List<Tuple<int, int>> NovaS = new List<Tuple<int, int>>();
            List<Tuple<int, int>> NovaX = new List<Tuple<int, int>>();


            while (!kraj)
            {
                kraj = true;
                // dodajemo nove pozicije
                for (int i = 0; i < N; i++)
                {
                    for (int j = 0; j < M; j++)
                    {
                        if (mapa[i,j] == "S")
                        {
                            // vracamo okolna polja
                            List<Tuple<int, int>> Polja;
                            OkolnaPolja(i,j,N,M,out Polja);

                            // ako su okolna polja dostupna
                            foreach(var poz in Polja)
                            {
                                if(mapa[poz.Item1, poz.Item2]==".")
                                {
                                    NovaS.Add(poz);
                                    kraj=false;
                                }
                            }
                        }


                        else if (mapa[i, j] == "X")
                        {
                            // vracamo okolna polja
                            List<Tuple<int, int>> Polja;
                            OkolnaPolja(i, j, N, M, out Polja);

                            // ako su okolna polja dostupna
                            foreach (var poz in Polja)
                            {
                                if (mapa[poz.Item1, poz.Item2] == ".")
                                {
                                    NovaX.Add(poz);
                                }
                                else if (mapa[poz.Item1, poz.Item2] == "S")
                                {
                                    NovaX.Add(poz);
                                }

                            }
                        }


                    }
                }

                if (kraj == true) break;

                //NovaS = NovaS.Distinct().ToList();
                //NovaX = NovaX.Distinct().ToList();

                // onda ih upisujemo u matricu
                foreach (var poz in NovaS)
                {
                    mapa[poz.Item1, poz.Item2] = "S";
                }
                foreach (var poz in NovaX)
                {
                    mapa[poz.Item1, poz.Item2] = "X";
                }



                /*
                for (int i = 0; i < N; i++)
                {
                    for (int j = 0; j < M; j++)
                    {
                        Console.Write(mapa[i, j]);
                    }
                    Console.WriteLine();
                }
                */


            }

            int brojac = 0;
            for (int i = 0; i < N; i++)
            {
                for (int j = 0; j < M; j++)
                {
                    if (mapa[i, j] == "S")
                        brojac++;
                }
            }
            
            Console.WriteLine(brojac);

        }
    }
}