#include<bits/stdc++.h>
using namespace std;
const int N=1510,dx[]={0,-1,0,1,0},dy[]={0,0,1,0,-1};
int n,m;
char a[N][N];
bool vis[N][N],flag;
void dfs(int x,int y,int ax,int ay) {
if(flag) return;
if(vis[x][y]) {
if(x!=ax||y!=ay) flag=true;
return;
}
vis[x][y]=true;
for(int i=1;i<=4;i++) {
int nx=(x+dx[i]+n)%n,ny=(y+dy[i]+m)%m;
int nax=ax+dx[i],nay=ay+dy[i];
if(a[nx][ny]!='#') dfs(nx,ny,nax,nay);
}
}
int main() {
while(~scanf("%d%d",&n,&m)) {
int x,y;
for(int i=0;i<n;i++) {
scanf("%s",a[i]);
for(int j=0;j<m;j++) {
if(a[i][j]=='S') {
x=i;
y=j;
}
}
}
flag=false;
memset(vis,false,sizeof(vis));
dfs(x,y,x,y);
if(flag) printf("Yes\n");
else printf("No\n");
}
}