#include <bits/stdc++.h>
using namespace std;
int maze[1500][1500];
pair<int, int> was[1500][1500];
int n, m;
int sr, sc;
inline int rem(int x, int y) {
  x %= y;
  return (x < 0) ? x + y : x;
}
bool dfs(int r, int c) {
  int rm = rem(r, n), cm = rem(c, m);
  if (maze[rm][cm] == 1) {
    return was[rm][cm] != pair<int, int>(r, c);
  }
  int rmn, cmn;
  if (maze[rm][cm] == 0) {
    maze[rm][cm] = 1;
    was[rm][cm] = pair<int, int>(r, c);
    rmn = rem(r, n), cmn = rem(c - 1, m);
    if (maze[rmn][cmn] != -1 && dfs(r, c - 1)) return true;
    rmn = rem(r, n), cmn = rem(c + 1, m);
    if (maze[rmn][cmn] != -1 && dfs(r, c + 1)) return true;
    rmn = rem(r + 1, n), cmn = rem(c, m);
    if (maze[rmn][cmn] != -1 && dfs(r + 1, c)) return true;
    rmn = rem(r - 1, n), cmn = rem(c, m);
    if (maze[rmn][cmn] != -1 && dfs(r - 1, c)) return true;
  }
  return false;
}
void TheSolution(istream& input, ostream& output) {
  input >> n >> m;
  string s;
  memset(maze, -1, sizeof(maze));
  for (int i = 0; i < n; i++) {
    input >> s;
    for (int j = 0; j < m; j++) {
      if (s[j] == '.') maze[i][j] = 0;
      if (s[j] == 'S') {
        sr = i;
        sc = j;
        maze[i][j] = 0;
      }
      was[i][j] = pair<int, int>(-1000000, -1000000);
    }
  }
  output << (dfs(sr, sc) ? "Yes" : "No");
}
int main() {
  TheSolution(cin, cout);
  return 0;
}
