#include <bits/stdc++.h>

using namespace std;

int main()
{
    int N, M, broj = 1;
    char c;
    cin >> N >> M;
    bool vatraBrzina[N][M];
    int matricaProlaza[N][M];
    int StevaX;
    int StevaY;
    memset(vatraBrzina, false, sizeof(vatraBrzina));
    queue<int> vatraX;
    queue<int> vatraY;
    queue<int> udaljenost;
    bool StevaPosecen[N][M];
    for(int i = 0; i < N; i++){
        for(int j = 0; j < M; j++){
            cin >> c;
            if(c == 'X'){
                vatraBrzina[i][j] = true;
                matricaProlaza[i][j] = 1;
                vatraX.push(i);
                vatraY.push(j);
                udaljenost.push(1);
                StevaPosecen[i][j] = false;
            }
            else if(c == 'S'){
                matricaProlaza[i][j] = 1;
                StevaX = i;
                StevaY = j;
                StevaPosecen[i][j] = true;
                vatraBrzina[i][j] = false;
            }
            else if(c == '.'){
                matricaProlaza[i][j] = 1;
                StevaPosecen[i][j] = false;
                vatraBrzina[i][j] = false;
            }
            else{
                matricaProlaza[i][j] = 0;
                StevaPosecen[i][j] = true;
                vatraBrzina[i][j] = false;
            }
        }
    }

    vatraX.push(StevaX);
    vatraY.push(StevaY);
    udaljenost.push(2001);

    while(!vatraX.empty()){
        int i, j, udaljen;
        i = vatraX.front();
        vatraX.pop();
        j = vatraY.front();
        vatraY.pop();
        udaljen = udaljenost.front();
        udaljenost.pop();
        if(i != N - 1){
            if(udaljen == 2001){
                if(!StevaPosecen[i + 1][j] && !vatraBrzina[i + 1][j]){
                    vatraX.push(i + 1);
                    vatraY.push(j);
                    StevaPosecen[i + 1][j] = true;
                    udaljenost.push(2001);
                    broj++;
                }
            }
            else if(!vatraBrzina[i + 1][j] && matricaProlaza[i + 1][j]){
                vatraBrzina[i + 1][j] = udaljen;
                vatraX.push(i + 1);
                vatraY.push(j);
                udaljenost.push(1);
            }
        }
        if(i != 0){
            if(udaljen == 2001){
                if(!StevaPosecen[i - 1][j] && !vatraBrzina[i - 1][j]){
                    vatraX.push(i - 1);
                    vatraY.push(j);
                    StevaPosecen[i - 1][j] = true;
                    udaljenost.push(2001);
                    broj++;
                }
            }
            else if(!vatraBrzina[i - 1][j] && matricaProlaza[i - 1][j]){
                vatraBrzina[i - 1][j] = true;
                vatraX.push(i - 1);
                vatraY.push(j);
                udaljenost.push(1);
            }
        }
        if(j != M - 1){
            if(udaljen == 2001){
                if(!StevaPosecen[i][j + 1] && !vatraBrzina[i][j + 1]){
                    vatraX.push(i);
                    vatraY.push(j + 1);
                    StevaPosecen[i][j + 1] = true;
                    udaljenost.push(2001);
                    broj++;
                }
            }
            else if(!vatraBrzina[i][j + 1] && matricaProlaza[i][j + 1]){
                vatraBrzina[i][j + 1] = true;
                vatraX.push(i);
                vatraY.push(j + 1);
                udaljenost.push(1);
            }
        }
        if(j != 0){
            if(udaljen == 2001){
                if(!StevaPosecen[i][j - 1] && !vatraBrzina[i][j - 1]){
                    vatraX.push(i);
                    vatraY.push(j - 1);
                    StevaPosecen[i][j - 1] = true;
                    udaljenost.push(2001);
                    broj++;
                }
            }
            else if(!vatraBrzina[i][j - 1] && matricaProlaza[i][j - 1]){
                vatraBrzina[i][j - 1] = true;
                vatraX.push(i);
                vatraY.push(j - 1);
                udaljenost.push(1);
            }
        }
    }

    cout << broj << endl;
    return 0;
}