#include <bits/stdc++.h>
#include <cstdio>
using namespace std;
//两次bfs分别记录s和e可以到达的区域,再判断这些区域能不能使用一次激光连通.

int main() {
    int n,m;
    cin>>n>>m;
    vector<vector<char>> mg(n,vector<char>(m));
    int sx,sy,ex,ey;
    for(int i=0;i<n;i++){
        getchar();
        for(int j=0;j<m;j++){
            cin>>mg[i][j];
            if(mg[i][j]=='S'){sx=i;sy=j;}
            if(mg[i][j]=='E'){ex=i;ey=j;}
        }
    }
    vector<vector<char>> mg1(mg);
    vector<vector<int>> fx={{0,1},{1,0},{0,-1},{-1,0}};
    queue<pair<int,int>> que;
    set<int> si,sj,ei,ej;
    que.push({sx,sy});
    while(!que.empty()){
        auto [x,y]=que.front();
        que.pop();
        si.insert(x);
        sj.insert(y);
        if(mg[x][y]=='E'||abs(x-ex)<=1||abs(y-ey)<=1){cout<<"YES";return 0;}
        for(auto i:fx){
            int xx=x+i[0],yy=y+i[1];
            if(xx>=0&&xx<n&&yy>=0&&yy<m&&mg[xx][yy]!='#'){
              que.push({xx,yy});
              mg[xx][yy]='#';  
            }
        }
    }
    que.push({ex,ey});
    while(!que.empty()){
        auto [x,y]=que.front();
        ei.insert(x);
        ej.insert(y);
        que.pop();
        if(mg[x][y]=='S'||abs(x-sx)<=1||abs(y-sy)<=1){cout<<"YES";return 0;}
        for(auto i:fx){
            int xx=x+i[0],yy=y+i[1];
            if(xx>=0&&xx<n&&yy>=0&&yy<m&&mg[xx][yy]!='#'){
              que.push({xx,yy});
              mg[xx][yy]='#';  
            }
        }
    }
    for(int i:si){  
        if(ei.count(i)||ei.count(i+1)||ei.count(i-1)){cout<<"YES";return 0;}
    }
    for(int i:sj){
        if(ej.count(i)||ej.count(i+1)||ej.count(i-1)){cout<<"YES";return 0;}
    }
    cout<<"NO";
}