#include <bits/stdc++.h>
using namespace std;

int n, m; char lavirint[1000][1000]; bool iskorisceno[1000][1000];

struct koord {
    int x, y;
};

koord kretanje[] = {
    {
        1, 0
    },
    {
        -1, 0
    },
    {
        0, 1
    },
    {
        0, -1
    }
};

koord operator+(koord a, koord b) {
    return {a.x + b.x, a.y + b.y};
}

void unesiLavirint() {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) cin >> lavirint[i][j];
    }
}

void ispisiLavirint() {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) cout << lavirint[i][j];
        cout << endl;
    }
}

void resetujNiz(bool a[][1000]) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) a[i][j] = false;
    }
}

bool moze(koord polje) {
    if (polje.x < m && polje.y < n && polje.x >= 0 && polje.y >= 0 && lavirint[polje.y][polje.x] == '.') return true;
    else return false;
}

int prebrojPolja(char p) {
    int br = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (lavirint[i][j] == p) br++;
        }
    }
    return br;
}

void prosiriPolje(char p) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (!iskorisceno[i][j]) {
                if (lavirint[i][j] == p) {
                    koord polje = {j, i};
                    for (int i = 0; i < 4; i++) {
                        koord sl = polje + kretanje[i];
                        if (moze(sl)) {
                            lavirint[sl.y][sl.x] = p;
                            iskorisceno[sl.y][sl.x] = true;
                        }
                    }
                    iskorisceno[i][j] = true;
                }
            }
        }
    }
    resetujNiz(iskorisceno);
}

void odigrajPotez() {
    prosiriPolje('X');
    prosiriPolje('S');
}

int bezbednaPolja() {
    int polja = 1, proslaPolja = -1;
    while (polja != proslaPolja) {
        proslaPolja = polja;
        odigrajPotez();
        polja = prebrojPolja('S');
    }
    return polja;
}

int main() {

    cin >> n >> m;

    unesiLavirint();

    cout << bezbednaPolja() << endl;

    return 0;
}