#include<bits/stdc++.h>
using namespace std;
int n, m, brs,br,brv;
char Mapa[1022][1022];
int mapas[1022][1022];
int mapav[1022][1022];
int  DR[4] = { -1,  0,  1,   0};  
int  DC[4] = {  0,  1,  0,  -1};  
queue <int > Qrs, Qcs, Qrv, Qcv;
void BFSS ( int r, int c){
    Qrs.push(r);
    Qcs.push(c);
    Mapa[r][c]='S';
    mapas[r][c]=min(mapas[r][c],brs);

    while(Qrs.size()){
         r=Qrs.front();
         c=Qcs.front();
         brs++;
         for(int k=0; k<4 ; k++){
            if(Mapa[r+DR[k]][c+DC[k]]=='.'){
                Qcs.push(c+DC[k]);
                Qrs.push(r+DR[k]);
                mapas[r+DR[k]][c+DC[k]]=min(mapas[r+DR[k]][c+DC[k]],brs);
                Mapa[r+DR[k]][c+DC[k]]='S';
            }
         }
    Qrs.pop();
    Qcs.pop();
    }
}
void BFSV ( int r, int c){
    Qrv.push(r);
    Qcv.push(c);
    Mapa[r][c]='#';
    mapav[r][c]=min(mapas[r][c],brs);

    while(Qrv.size()){
         r=Qrv.front();
         c=Qcv.front();
         brv++;
         for(int k=0; k<4 ; k++){
            if(Mapa[r+DR[k]][c+DC[k]]=='.'){
                Qcv.push(c+DC[k]);
                Qrv.push(r+DR[k]);
                mapav[r+DR[k]][c+DC[k]]=min(mapav[r+DR[k]][c+DC[k]],brv);
                Mapa[r+DR[k]][c+DC[k]]='#';
            }
         }
    Qrv.pop();
    Qcv.pop();
    }
}
int main () {
    memset (mapas,99,sizeof(mapas));
    memset (mapav,99,sizeof(mapav));
    
    cin>>n>>m;
    for(int i=1; i<= n; i++){
        for(int j=1; j<= m; j++){
            cin>>Mapa[i][j];       
        }
    }
    for(int i=1; i<= n; i++){
        for(int j=1; j<= m; j++){
            if(Mapa[i][j]=='S')
            {
                BFSS(i,j);
            } else if(Mapa[i][j]=='#'){
                BFSV(i,j);
            }      
        }
    }
    for(int i=1; i<= n; i++){
        for(int j=1; j<= m; j++){
            if(mapas[i][j]<mapav[i][j]){
                br++;
            }
        }
    }
    cout<<br<<endl;


    return 0;
}