using System;

namespace Pozar
{
	class Program
	{
		static void Potez(char[,] L,char c,int N,int M,int x,int y)
		{
			/*x y-1
			 * x-1 y
			 * x+1 y
			 * x y+1
			 */
			
			if(y-1>=0)
			{
				if(L[x,y-1]=='.')
					L[x,y-1]=c;
			}
			if(y+1<M)
			{
				if(L[x,y+1]=='.')
					L[x,y+1]=c;
			}
			if(x-1>=0)
			{
				if(L[x-1,y]=='.')
					L[x-1,y]=c;
			}
			if(x+1<N)
			{
				if(L[x+1,y]=='.')
					L[x+1,y]=c;
			}
		}
		
		public static void Main(string[] args)
		{
			string s=Console.ReadLine();
			int N=int.Parse(s.Split()[0]);
			int M=int.Parse(s.Split()[1]);
			char[,] L=new char[N,M];
			
			for(int i=0;i<N;i++)
			{
				s=Console.ReadLine();
				char[] c=new char[M];
				c=s.ToCharArray();
				
				for(int j=0;j<M;j++)
				{
					L[i,j]=c[j];
				}
			}
			
			bool f=false;
			
			while(f==false)
			{
				f=true;
				int[] x=new int[N*M];
				int[] y=new int[N*M];
				char[] p=new char[N*M];
				int b=0;
				
				for(int i=0;i<N;i++)
				{
					for(int j=0;j<M;j++)
					{
						if(L[i,j]=='X')
						{
							x[b]=i;
							y[b]=j;
							p[b]='X';
							b++;
						}
						if(L[i,j]=='.')
							f=false;
					}
				}
				for(int i=0;i<N;i++)
				{
					for(int j=0;j<M;j++)
					{
						if(L[i,j]=='S')
						{
							x[b]=i;
							y[b]=j;
							p[b]='S';
							b++;
						}
						if(L[i,j]=='.')
							f=false;
					}
				}
				for(int g=0;g<b;g++)
					Potez(L,p[g],N,M,x[g],y[g]);
			}
			
			int st=0;
			
			for(int i=0;i<N;i++)
			{
				for(int j=0;j<M;j++)
				{
					if(L[i,j]=='S')
						st++;
				}
			}
			
			Console.WriteLine(st);
		}
	}
}