#include<iostream>
#include<cstdio>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#include<set>
#include<algorithm>
#include<functional>
#include<cstring>
#include<deque>
using namespace std;
char map[1001][1001];
int dis[1001][1001];
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
struct pos{
int x,y,w;
pos(){};
pos(int _x,int _y,int _w){x=_x;y=_y;w=_w;}
};
int main()
{
int H,W;
while(~scanf("%d%d",&H,&W))
{
gets(map[0]);
for(int i=0;i<H;++i)
gets(map[i]);
int x,y;
for(int i=0;i<H;++i)
for(int j=0;j<W;++j)
if(map[i][j]=='E'){
x=i;y=j;
}
queue<pos> qu;
qu.push(pos(x,y,0));
memset(dis,0x3f,sizeof(dis));
dis[x][y]=0;
while(!qu.empty())
{
pos t=qu.front();qu.pop();
for(int i=0;i<4;++i){
int nx=t.x+dx[i];
int ny=t.y+dy[i];
int nw=t.w+1;
if(nx<0||H<=nx||ny<0||W<=ny)continue;
if(map[nx][ny]=='T')continue;
if(dis[nx][ny]==0x3f3f3f3f){
dis[nx][ny]=nw;
qu.push(pos(nx,ny,nw));
}
}
}
/*puts("D");
for(int p=0;p<H;++p){
for(int j=0;j<W;++j)
cout<<dis[p][j]<<' ';
cout<<endl;
}
cout<<endl;*/
for(int i=0;i<H;++i)
for(int j=0;j<W;++j)
if(map[i][j]=='S'){
x=i;y=j;
}
int lim=dis[x][y],ans=0;
for(int i=0;i<H;++i)
for(int j=0;j<W;++j)
if('1'<=map[i][j]&&map[i][j]<='9')
if(dis[i][j]<=lim)
ans+=map[i][j]-'0';
printf("%d\n",ans);
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNzdGRpbz4KI2luY2x1ZGU8Y21hdGg+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8c3RhY2s+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTxzZXQ+CiNpbmNsdWRlPGFsZ29yaXRobT4KI2luY2x1ZGU8ZnVuY3Rpb25hbD4KI2luY2x1ZGU8Y3N0cmluZz4KI2luY2x1ZGU8ZGVxdWU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjaGFyIG1hcFsxMDAxXVsxMDAxXTsKaW50IGRpc1sxMDAxXVsxMDAxXTsKaW50IGR4W109ezEsLTEsMCwwfTsKaW50IGR5W109ezAsMCwxLC0xfTsKc3RydWN0IHBvc3sKICAgIGludCB4LHksdzsKICAgIHBvcygpe307CiAgICBwb3MoaW50IF94LGludCBfeSxpbnQgX3cpe3g9X3g7eT1feTt3PV93O30KfTsKaW50IG1haW4oKQp7CiAgICBpbnQgSCxXOwogICAgd2hpbGUofnNjYW5mKCIlZCVkIiwmSCwmVykpCiAgICB7CiAgICAgICAgZ2V0cyhtYXBbMF0pOwogICAgICAgIGZvcihpbnQgaT0wO2k8SDsrK2kpCiAgICAgICAgICAgIGdldHMobWFwW2ldKTsKICAgICAgICBpbnQgeCx5OwogICAgICAgIGZvcihpbnQgaT0wO2k8SDsrK2kpCiAgICAgICAgICAgIGZvcihpbnQgaj0wO2o8VzsrK2opCiAgICAgICAgICAgICAgICBpZihtYXBbaV1bal09PSdFJyl7CiAgICAgICAgICAgICAgICAgICAgeD1pO3k9ajsKICAgICAgICAgICAgICAgIH0KICAgICAgICBxdWV1ZTxwb3M+IHF1OwogICAgICAgIHF1LnB1c2gocG9zKHgseSwwKSk7CiAgICAgICAgbWVtc2V0KGRpcywweDNmLHNpemVvZihkaXMpKTsKICAgICAgICBkaXNbeF1beV09MDsKICAgICAgICB3aGlsZSghcXUuZW1wdHkoKSkKICAgICAgICB7CiAgICAgICAgICAgIHBvcyB0PXF1LmZyb250KCk7cXUucG9wKCk7CiAgICAgICAgICAgIGZvcihpbnQgaT0wO2k8NDsrK2kpewogICAgICAgICAgICAgICAgaW50IG54PXQueCtkeFtpXTsKICAgICAgICAgICAgICAgIGludCBueT10LnkrZHlbaV07CiAgICAgICAgICAgICAgICBpbnQgbnc9dC53KzE7CiAgICAgICAgICAgICAgICBpZihueDwwfHxIPD1ueHx8bnk8MHx8Vzw9bnkpY29udGludWU7CiAgICAgICAgICAgICAgICBpZihtYXBbbnhdW255XT09J1QnKWNvbnRpbnVlOwogICAgICAgICAgICAgICAgaWYoZGlzW254XVtueV09PTB4M2YzZjNmM2YpewogICAgICAgICAgICAgICAgICAgIGRpc1tueF1bbnldPW53OwogICAgICAgICAgICAgICAgICAgIHF1LnB1c2gocG9zKG54LG55LG53KSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLypwdXRzKCJEIik7CiAgICAgICAgZm9yKGludCBwPTA7cDxIOysrcCl7CiAgICAgICAgICAgIGZvcihpbnQgaj0wO2o8VzsrK2opCiAgICAgICAgICAgICAgICBjb3V0PDxkaXNbcF1bal08PCcgJzsKICAgICAgICAgICAgY291dDw8ZW5kbDsKICAgICAgICB9CiAgICAgICAgY291dDw8ZW5kbDsqLwogICAgICAgIGZvcihpbnQgaT0wO2k8SDsrK2kpCiAgICAgICAgICAgIGZvcihpbnQgaj0wO2o8VzsrK2opCiAgICAgICAgICAgICAgICBpZihtYXBbaV1bal09PSdTJyl7CiAgICAgICAgICAgICAgICAgICAgeD1pO3k9ajsKICAgICAgICAgICAgICAgIH0KICAgICAgICBpbnQgbGltPWRpc1t4XVt5XSxhbnM9MDsKICAgICAgICBmb3IoaW50IGk9MDtpPEg7KytpKQogICAgICAgICAgICBmb3IoaW50IGo9MDtqPFc7KytqKQogICAgICAgICAgICAgICAgaWYoJzEnPD1tYXBbaV1bal0mJm1hcFtpXVtqXTw9JzknKQogICAgICAgICAgICAgICAgICAgIGlmKGRpc1tpXVtqXTw9bGltKQogICAgICAgICAgICAgICAgICAgICAgICBhbnMrPW1hcFtpXVtqXS0nMCc7CiAgICAgICAgcHJpbnRmKCIlZFxuIixhbnMpOwogICAgfQogICAgcmV0dXJuIDA7Cn0=