#include<bits/stdc++.h>
#define N 1500
using namespace std;
int n,m,dx[]={0,0,1,-1},dy[]={1,-1,0,0};
char c[2*N][N];
bool vis[2*N][N];
struct node{
int x,y;
};
queue<node> q;
void clear(){
queue<node> empty;
swap(q,empty);
}
int main(){
while(~scanf("%d%d",&n,&m)){
for(int i=0;i<n;i++) scanf("%s",c[i]);
int sx,sy;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(c[i][j]=='S'){
sx=i;
sy=j;
break;
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(c[i][j]=='S') c[i+n][j]='.';
else c[i+n][j]=c[i][j];
}
}
memset(vis,0,sizeof(vis));
q.push({sx,sy});
vis[sx][sy]=1;
bool flag=0;
while(!q.empty()){
node now=q.front();
q.pop();
for(int i=0;i<4;i++){
int nx=now.x+dx[i],ny=now.y+dy[i];
if(nx<0||nx>=2*n||ny<0||ny>=m) continue;
if(nx==sx+n&&ny==sy){
flag=1;
clear();
break;
}
if(c[nx][ny]=='#'||vis[nx][ny]) continue;
vis[nx][ny]=1;
q.push({nx,ny});
}
}
if(flag) printf("Yes\n");
else printf("No\n");
}
return 0;
}