#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
****************************************************************/