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

int n, m;
string matrica[1010];

struct pozicija {
    int x = 0;
    int y = 0;
};
int stevo = 0;
stack<pozicija> vatra;
stack<pozicija> steva;
pozicija temp;
stack<pozicija> nove_vatre;
stack<pozicija> nove_steve;

template<typename T>
T clmp(T val, T low, T up) {
    if(val < low)
        val = low;
    if(val > up)
        val = up;
    return val;
}

bool jel_slobodno(pozicija& poz) {
    if(poz.y < 0 || poz.x < 0 || poz.y > n-1 || poz.x > m-1)
        return false;
    return matrica[poz.y][poz.x] == '.';
}

bool jel_slobodno_vatra(pozicija& poz) {
    if(poz.y < 0 || poz.x < 0 || poz.y > n-1 || poz.x > m-1)
        return false;
    return matrica[poz.y][poz.x] == '.' || matrica[poz.y][poz.x] == 'S';
}

void print_matrix() {
    for(int i = 0; i < n; i++) {
        cout << matrica[i] << '\n';
    }
}

int main() {
    ///////////
    // INPUT //
    ///////////
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> m;
    for(int i = 0; i < n; i++) {
        cin >> matrica[i];

        // DEO RACUNA //
        for(int j = 0; j < m; j++) {
            if(matrica[i][j] == 'X') {
                vatra.push({j, i});
            } else if(matrica[i][j] == 'S')  {
                stevo++;
                steva.push({j, i});
            }
        }
    }

    ///////////
    // RACUN //
    ///////////
    while(!steva.empty()) {
        //cout << endl;
        //cout << "stevo: " << steva.size() << ", vatra: " << vatra.size() << endl;
        //print_matrix();
        nove_vatre = stack<pozicija>();
        nove_steve = stack<pozicija>();
        while(!vatra.empty()) {
            temp = vatra.top();
            temp.x += 1;
            if(jel_slobodno_vatra(temp)) { nove_vatre.push(temp); matrica[temp.y][temp.x] = 'X'; };
            temp.x -= 2;
            if(jel_slobodno_vatra(temp)) { nove_vatre.push(temp); matrica[temp.y][temp.x] = 'X'; };
            temp.x += 1;
            temp.y += 1;
            if(jel_slobodno_vatra(temp)) { nove_vatre.push(temp); matrica[temp.y][temp.x] = 'X'; };
            temp.y -= 2;
            if(jel_slobodno_vatra(temp)) { nove_vatre.push(temp); matrica[temp.y][temp.x] = 'X'; };
            //cout << nove_vatre.size() << endl;
            vatra.pop();
            //cout << nove_vatre.size() << endl;
        }
        vatra = nove_vatre;
        while(!steva.empty()) {
            temp = steva.top();
            temp.x += 1;
            if(jel_slobodno(temp)) { nove_steve.push(temp); stevo++; matrica[temp.y][temp.x] = 'S'; };
            temp.x -= 2;
            if(jel_slobodno(temp)) { nove_steve.push(temp); stevo++; matrica[temp.y][temp.x] = 'S'; };
            temp.x += 1;
            temp.y += 1;
            if(jel_slobodno(temp)) { nove_steve.push(temp); stevo++; matrica[temp.y][temp.x] = 'S'; };
            temp.y -= 2;
            if(jel_slobodno(temp)) { nove_steve.push(temp); stevo++; matrica[temp.y][temp.x] = 'S'; };
            steva.pop();
        }
        steva = nove_steve;
        //cout << "stevo: " << steva.size() << ", vatra: " << vatra.size() << endl;
    }

    ////////////
    // OUTPUT //
    ////////////
    cout << stevo << endl;

    return 0;
}