#include<bits/stdc++.h>
using namespace std;
int n,m,c,a[100011],x,y,x1x,y1y;
char q[1000][1000];
struct Node{
	int x,y,t;
};
queue<Node> q; 
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
	for(int j=1;j<=m;j++){
	cin>>q[i][j];
	//c[i][j]=INT_MAX;
	}
}
for(int i=1;i<=n;i++){
	for(int j=1;j<=m;j++){
	if(q[i][j]=='S'){
		x=i;
		y=j;
	} 
	if(q[i][j]=='E'){
		x1x=i;
		y1y=j;
		
	} 
}
}
q.push({x,y,0});
while(!q.empty()){
	int x=q.front().x;
	int y=q.front().y;
	int t=q.front().t+1;
		int fx[5]={0,1,0,-1,0};
	int fy[5]={1,0,-1,0,0};
	for(int i=0;i<=3;i++){
		int tx=a+fx[i];
		int ty=b+fy[i];
	
		if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&q[tx][ty]!='#'){
			//if(tx==x1x&&ty==y1y) f=true;
			q[tx][ty]='#';
          q.push({tx,ty,t});
             if(tx==x1x&&ty==y1y){
                    cout<<t*c;
                    return 0;
		}
}
//	if(x-1==m){
//		cout<<step+1;
//		return 0;
//	}
//	else{
//		q.push({x-1,step+1});
//	}
//	if(x+1==m){
//		cout<<step+1;
//		return 0;
//	}
//	else{
//		q.push({x+1,step+1});
//	}
//	if(x*2==m){
//		cout<<step+1;
//		return 0;
//	}
//	else{
//		q.push({x*2,step+1});
//	}
	q.pop();
}
cout<<-1;
	return 0;
}	


/**************************************************************
	Problem: 2109
	User: chenyubo
	Language: C
	Result: Compile Error
****************************************************************/