#include <bits/stdc++.h>

using namespace std;

int main()
{
    // takmicarsko programiranje
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    // unos
    int n, m; cin >> n >> m;
    char matrica[n][m];
    for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) cin >> matrica[i][j];

    // resavanje
    pair<int, int> que[n * m * 4];
    int trenutno_que = 0, ukupno_que = 0;
    // potraga za vatrom
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            if (matrica[i][j] == 'X')
            {
                que[ukupno_que] = {i, j};
                ukupno_que++;
            }
    // potraga za Stevom
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            if (matrica[i][j] == 'S')
            {
                que[ukupno_que] = {i, j};
                ukupno_que++;
                break;
            }
    // BFSic
    while (trenutno_que < ukupno_que)
    {
        int i = que[trenutno_que].first, j = que[trenutno_que].second;

        if (i > 0 && matrica[i - 1][j] == '.')
        {
            matrica[i - 1][j] = matrica[i][j];
            que[ukupno_que] = {i - 1, j};
            ukupno_que++;
        }
        if (i < n - 1 && matrica[i + 1][j] == '.')
        {
            matrica[i + 1][j] = matrica[i][j];
            que[ukupno_que] = {i + 1, j};
            ukupno_que++;
        }
        if (j > 0 && matrica[i][j - 1] == '.')
        {
            matrica[i][j - 1] = matrica[i][j];
            que[ukupno_que] = {i, j - 1};
            ukupno_que++;
        }
        if (j < n - 1 && matrica[i][j + 1] == '.')
        {
            matrica[i][j + 1] = matrica[i][j];
            que[ukupno_que] = {i, j + 1};
            ukupno_que++;
        }

        trenutno_que++;
    }

    // resenje
    int ans = 0;
    for (int i = 0; i < n; i++) 
        for (int j = 0; j < m; j++) 
            if (matrica[i][j] == 'S') ans++;
    cout << ans << endl;
}