#include <iostream>
#include <vector>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false);

    int n, m;

    cin >> n >> m;

    vector<string> lavirint(n);
    
    for (int i = 0; i < n; i++) cin >> lavirint[i];

    vector<vector<int>> vatra(n, vector<int>(m, -1)), steva(n, vector<int>(m, -1));
    int pomerajX[] = {-1, 1, 0, 0}, pomerajY[] = {0, 0, -1, 1};
    
    vector<int> redVatrenePoljaX, redVatrenePoljaY, redStevinihPoljaX, redStevinihPoljaY;
    int brojVatrenihPolja = 0, brojStevinihPolja = 0;

    for (int i = 0; i < n; i++) 
        for (int j = 0; j < m; j++) {
            if (lavirint[i][j] == 'X') {
                vatra[i][j] = 0;
                redVatrenePoljaX.push_back(i);
                redVatrenePoljaY.push_back(j);
                brojVatrenihPolja++;
            }
            if (lavirint[i][j] == 'S') {
                steva[i][j] = 0;
                redStevinihPoljaX.push_back(i);
                redStevinihPoljaY.push_back(j);
                brojStevinihPolja++;
            }
        }

    int indexVatrene = 0;
    while (indexVatrene < brojVatrenihPolja) {
        int x = redVatrenePoljaX[indexVatrene], y = redVatrenePoljaY[indexVatrene];
        indexVatrene++;
        for (int d = 0; d < 4; d++) {
            int nx = x + pomerajX[d], ny = y + pomerajY[d];
            if (nx >= 0 && nx < n && ny >= 0 && ny < m && lavirint[nx][ny] == '.' && vatra[nx][ny] == -1) {
                vatra[nx][ny] = vatra[x][y] + 1;
                redVatrenePoljaX.push_back(nx);
                redVatrenePoljaY.push_back(ny);
                brojVatrenihPolja++;
            }
        }
    }

    int indexStevine = 0;
    while (indexStevine < brojStevinihPolja) {
        int x = redStevinihPoljaX[indexStevine], y = redStevinihPoljaY[indexStevine];
        indexStevine++;
        for (int d = 0; d < 4; d++) {
            int nx = x + pomerajX[d], ny = y + pomerajY[d];
            if (nx >= 0 && nx < n && ny >= 0 && ny < m && lavirint[nx][ny] == '.' && steva[nx][ny] == -1) {
                steva[nx][ny] = steva[x][y] + 1;
                redStevinihPoljaX.push_back(nx);
                redStevinihPoljaY.push_back(ny);
                brojStevinihPolja++;
            }
        }
    }

    int rezultat = 0;
    for (int i = 0; i < n; i++) 
        for (int j = 0; j < m; j++) 
            if (steva[i][j] != -1 && (vatra[i][j] == -1 || steva[i][j] < vatra[i][j])) 
                rezultat++;

    cout << rezultat;
    
    return 0;
}