#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int M = 4e6 + 1;
vector<int> nei[M];
int dis[M];
signed main()
{
ios::sync_with_stdio(0);
cin.tie(NULL), cout.tie(NULL);
int n,m;
cin>>n>>m;
string a[n];
int ind[n][m][4], id=0;// r c \ /
vector<int> v[10];
deque<int> q;
vector<int> e;
for (int i=0;i<M;i++) dis[i]=M*2;
for (int i=0;i<n;i++)
{
cin>>a[i];
for (int j=0;j<m;j++)
{
if (a[i][j]=='#') continue;
if (!j or a[i][j-1]=='#') ind[i][j][0]=id++;
else ind[i][j][0]=ind[i][j-1][0];
if (!i or a[i-1][j]=='#') ind[i][j][1]=id++;
else ind[i][j][1]=ind[i-1][j][1];
if (!i or !j or a[i-1][j-1]=='#') ind[i][j][2]=id++;
else ind[i][j][2]=ind[i-1][j-1][2];
if (!i or j==m-1 or a[i-1][j+1]=='#') ind[i][j][3]=id++;
else ind[i][j][3]=ind[i-1][j+1][3];
for (int k=0;k<4;k++)
{
if (a[i][j]=='S') q.push_back(ind[i][j][k]), dis[ind[i][j][k]]=0;
else if (a[i][j]=='E') e.push_back(ind[i][j][k]);
else if(a[i][j]!='.')
{
if (v[a[i][j]-'0'].size()>=4)
{
for (int l=0;l<4;l++)
nei[v[a[i][j]-'0'][l]].push_back(ind[i][j][k]),
nei[ind[i][j][k]].push_back(v[a[i][j]-'0'][l]);
}
else
v[a[i][j]-'0'].push_back(ind[i][j][k]);
}
for (int l=0;l<4;l++)
nei[ind[i][j][k]].push_back(ind[i][j][l]);
}
}
}
while (!q.empty())
{
int u=q.front();q.pop_front();
for (int v:nei[u])
if (dis[v]>dis[u]+1)
dis[v]=dis[u]+1, q.push_front(v);
}
int ans=M*2;
for (int i:e)
ans=min(ans,dis[i]);
if (ans==M*2) ans=-2;
cout<<ans+1<<endl;
return 0;
}