#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
int ABS(int a){return max(a,-a);}
char in[11];
int m[120][120];
vector<pair<int,int> >at[11000];
int dp[120][120];
int main(){
	int a,b;
	while(scanf("%d%d",&b,&a),a){
		for(int i=0;i<11000;i++)at[i].clear();
		int n=0;
		
		for(int i=0;i<a;i++)for(int j=0;j<b;j++)dp[i][j]=999999999;
		for(int i=0;i<a;i++)for(int j=0;j<b;j++){
			scanf("%s",in);
			if(in[0]=='.')m[i][j]=-1;
			else if(in[0]=='S'){
				m[i][j]=0;
				at[0].push_back(make_pair(i,j));
				dp[i][j]=0;
			}else if(in[0]=='G'){
				m[i][j]=-2;
			}else{
				int v=0;
				for(int k=0;in[k];k++){
					v*=10;v+=in[k]-'0';
				}
				m[i][j]=v;
				n=max(n,v);
				at[v].push_back(make_pair(i,j));
			}
		}
		for(int i=0;i<a;i++)for(int j=0;j<b;j++)if(m[i][j]==-2){
			at[n+1].push_back(make_pair(i,j));
		}
		for(int i=0;i<=n;i++){
			for(int j=0;j<at[i].size();j++){
				for(int k=0;k<at[i+1].size();k++){
					dp[at[i+1][k].first][at[i+1][k].second]=min(dp[at[i+1][k].first][at[i+1][k].second],
					dp[at[i][j].first][at[i][j].second]+ABS(at[i][j].first-at[i+1][k].first)+ABS(at[i][j].second-at[i+1][k].second));
				}
			}
		}
		printf("%d\n",dp[at[n+1][0].first][at[n+1][0].second]);
	}
}