import java.util.Scanner;

public class Main {
    static int[][]move={{0,1},{0,-1},{1,0},{-1,0}};
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int m=sc.nextInt();
        int[]group=new int[n*m];
        int start=-1,end=-1;
        char[][]cs=new char[n][m];
        for (int i = 0; i < n; i++) {
            cs[i]=sc.next().toCharArray();
            for (int j = 0; j < m; j++) {
                group[i*m+j]=i*m+j;
                if(cs[i][j]=='S'){
                    start=i*m+j;
                }
                if(cs[i][j]=='E'){
                    end=i*m+j;
                }
            }
        }
        sc.close();
        //连通块处理
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if(cs[i][j]!='#'){
                    for (int[] d : move) {
                        int x=i+d[0],y=j+d[1];
                        if(x>=0&&y>=0&&x<n&&y<m&&cs[x][y]!='#'){
                            union(i*m+j, x*m+y, group);
                        }
                    }
                }
            }
        }
        if(find(start, group)==find(end, group)){
            System.out.println("YES");
            //能直接走到,不需要使用激光
        }else{
            boolean[]row=new boolean[n];
            boolean[]col=new boolean[m];
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    for (int[] d : move) {
                        int x=i+d[0];
                        int y=j+d[1];//跟end一个连通块相邻的位置标记true,
                        if(x>=0&&y>=0&&x<n&&y<m&&find(x*m+y, group)==find(end, group)){
                            row[i]=col[j]=true;
                        }
                    }
                }
            }
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {//如果start一个连通块,同时该行或者列标记true
                    //说明可以用激光到达
                    if(find(i*m+j, group)==find(start, group)&&(row[i]||col[j])){
                        System.out.println("YES");
                        return;
                    }
                }
            }
            System.out.println("NO");
        }

    }
    static void union(int x, int y,int[]group){
        int px=find(x, group);
        int py=find(y, group);
        if(px>py){
            group[px]=py;
        }else if(px<py){
            group[py]=px;
        }
    }
    static int find(int x,int[]group){
        if(group[x]==x){
            return x;
        }
        return group[x]=find(group[x], group);
    }
}