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

typedef struct {
  int i, j;
  char c;
} cell;

int main() { 
  int n, m;
  scanf("%d %d", &n, &m);
  char a[n][m];
  queue<cell> q;

  for (int i=0; i<n; i++) {
    for (int j=0; j<m; j++) {
      scanf(" %c", &a[i][j]);
    }
  }

  for (int i=0; i<n; i++) {
    for (int j=0; j<m; j++) {
      if (a[i][j] == 'X')
        q.push({i, j, 'X'});
    }
  }

  for (int i=0; i<n; i++) {
    for (int j=0; j<m; j++) {
      if (a[i][j] == 'S')
        q.push({i, j, 'S'});
    }
  }

  int res=1;
  int dx[] = {1, 0, -1, 0};
  int dy[] = {0, 1, 0, -1};
  cell f;
  while (!q.empty()) {
    f = q.front();
    q.pop();

    for(int d=0; d<4; d++) {
      int ni = f.i + dy[d];
      int nj = f.j + dx[d];

      if (ni >= 0 && ni < n && nj >= 0 && nj < m && a[ni][nj] == '.') {
        if (f.c == 'X') {
          a[ni][nj] = 'X';
          q.push({ni, nj, 'X'});
        } else if (f.c == 'S') {
          a[ni][nj] = 'S';
          q.push({ni, nj, 'S'});
          res++;
        }
      }
    }
  }

  printf("%d", res);

  /*int res=0;
  
  for (int i=0; i<n; i++) {
    for (int j=0; j<m; j++) {
      if (a[i][j] == 'S') res++;
    }
  }*/
}