#include <bits/stdc++.h>
using namespace std;
char a[1511][1511];
char test;
int way[4][2]={{0,1},{0,-1},{-1,0},{1,0}};
int pan[1511][1511][2];
int nowx[10001];
int nowy[10001];
int main(){
int n,m,e,fpan;
while(cin>>n>>m){
e=1;
fpan=0;
memset(pan,0,sizeof(pan));
memset(nowx,0,sizeof(nowx));
memset(nowy,0,sizeof(nowy));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>test;
a[i][j]=test;
if(a[i][j]=='S'){
nowx[1]=i;nowy[1]=j;pan[i][j][0]=200000;pan[i][j][1]=200000;
}
}
}
for(int i=1;i<=e;i++){
int x,y;
x=nowx[i];y=nowy[i];
if(fpan==1){break;}
for(int j=0;j<4;j++){
if((x+way[j][0])<0){
if(a[n-1][y]!='#'){
if(!pan[n-1][y][0]&&!pan[n-1][y][1]){
pan[n-1][y][0]=pan[x][y][0]-1;pan[n-1][y][1]=pan[x][y][1];e++;nowx[e]=n-1;nowy[e]=y;}
else if(pan[x][y][0]-1!=pan[n-1][y][0]||pan[x][y][1]!=pan[n-1][y][1]){
fpan=1;
break;
}
}
}
else if((x+way[j][0])>=n){
if(a[0][y]!='#'){
if(!pan[0][y][0]&&!pan[0][y][1]){
pan[0][y][0]=pan[x][y][0]+1;pan[0][y][1]=pan[x][y][1];e++;nowx[e]=0;nowy[e]=y;}
else if(pan[x][y][0]+1!=pan[0][y][0]||pan[x][y][1]!=pan[0][y][1]){
fpan=1;
break;
}
}
}
else if((y+way[j][1])<0){
if(a[x][m-1]!='#'){
if(!pan[x][m-1][0]&&!pan[x][m-1][1]){
pan[x][m-1][0]=pan[x][y][0];pan[x][m-1][1]=pan[x][y][1]-1;e++;nowx[e]=x;nowy[e]=m-1;}
else if(pan[x][y][0]!=pan[x][m-1][0]||pan[x][m-1][1]!=pan[x][y][1]-1){
fpan=1;
break;
}
}
}
else if((y+way[j][1])>=m){
if(a[x][0]!='#'){
if(!pan[x][0][0]&&!pan[x][0][1]){
pan[x][0][0]=pan[x][y][0];pan[x][0][1]=pan[x][y][1]+1;e++;nowx[e]=x;nowy[e]=0;}
else if(pan[x][y][0]!=pan[x][0][0]||pan[x][y][1]+1!=pan[x][0][1]){
fpan=1;
break;
}
}
}
else{
if(a[x+way[j][0]][y+way[j][1]]!='#'){
if(!pan[x+way[j][0]][y+way[j][1]][0]&&!pan[x+way[j][0]][y+way[j][1]][1]){
pan[x+way[j][0]][y+way[j][1]][0]=pan[x][y][0];
pan[x+way[j][0]][y+way[j][1]][1]=pan[x][y][1];
e++;nowx[e]=x+way[j][0];nowy[e]=y+way[j][1];
}
else if(pan[x+way[j][0]][y+way[j][1]][0]!=pan[x][y][0]||pan[x+way[j][0]][y+way[j][1]][1]!=pan[x][y][1]){
fpan=1;
break;
}
}
}
}
}
if(fpan==1){cout<<"Yes"<<endl;}
else{cout<<"No"<<endl;}
}
return 0;
}