//第一次写题解,话不多说直接上代码!!!!

using namespace std;
const int N=510;
char a[N][N];
int x1,y1,x2,y2;//(x1,y1)为S的坐标;(x2,y2)为E的坐标
int n,m;
int flag=0;//一个标记
void dfs(int x,int y)
{
	if(a[x][y]=='#'||x<1||y<1||x>n||y>m)return;
	if(x==x2&&y==y2) { cout<<"Yes"<<endl;flag=1; }
			a[x][y]='#';//走过就标记,防止重复;
	dfs(x+1,y);//分四个方向递归,直到找到E点;
	dfs(x-1,y);
	dfs(x,y+1);
	dfs(x,y-1);
	
}
int main()
{
	while(cin>>n>>m){
		flag=0; //一定要重新赋值,不然下一组答有误
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
			{
				cin>>a[i][j];
				if(a[i][j]=='S')//边输入边查找S,E的坐标
				{
					x1=i;y1=j;
				}
				if(a[i][j]=='E')
				{
					x2=i;y2=j;
				}
			}
		dfs(x1,y1);
		if(flag!=1)cout<<"No"<<endl;
	}

	return 0;
	
}
 //有不懂的可私信讨论哦,