#include<bits/stdc++.h>
using namespace std;
const int N=1505;
int n,m;
char ch;
int vis[N][N];
int sx,sy;
int dx[]={0,-1,0,1},dy[]={1,0,-1,0};
bool flag;
map<pair<int,int>,bool>ds;
void dfs(int x,int y,int pre_x,int pre_y){
if(flag){
return;
}
vis[x][y]=2;
for(int i=0;i<4;i++){
int px=x+dx[i]+m,py=y+dy[i]+n; ds[{px,py}]=1;
px%=m,py%=n;
if(px<0||px>m||py<0||py>n||vis[px][py]==1||px==pre_x&&py==pre_y){
continue;
}
if(vis[px][py]==2){
if(ds[{px,py}]){
flag=1; cout<<"Yes\n";
}
return;
}
dfs(px,py,x,y);
}
}
int main(){
cin.tie(0)->sync_with_stdio(0);
while(cin>>m>>n){
memset(vis,0,sizeof vis); flag=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>ch;
if(ch=='#'){
vis[i][j]=1;
}
else if(ch=='S'){
sx=i,sy=j;
}
}
}
if(n==1&&m==1){
cout<<"Yes\n"; continue;
}
dfs(sx,sy,sx,sy);
if(flag==0){
cout<<"No\n";
}
}
return 0;
}