#include <bits/stdc++.h>
using namespace std;
struct note{
int x,y,s;
}que[160009];
struct a{
int x1,y1,x2,y2,b;
}Z[109];
long long int B[309][309],N[4][2]={{1,0},{0,1},{-1,0},{0,-1}},head=1,tail=1,n,m,sx,sy,zx,zy,tx,ty,i,j,f,p;
char A[309][309];
int main(){
cin>>n>>m;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
cin>>A[i][j];
if(A[i][j]=='@'){
sx=i;
sy=j;
}else if(A[i][j]=='='){
zx=i;
zy=j;
}else if(A[i][j]>='A'&&A[i][j]<='Z'){
if(Z[A[i][j]-'0'].b==0){
Z[A[i][j]-'0'].b=1;
Z[A[i][j]-'0'].x1=i;
Z[A[i][j]-'0'].y1=j;
}else{
Z[A[i][j]-'0'].x2=i;
Z[A[i][j]-'0'].y2=j;
}
}
}
}
B[sx][sy]=1;
que[tail].x=sx;
que[tail].y=sy;
que[head].s=0;
tail++;
while(head<tail){
for(i=0;i<8;i++){
tx=que[head].x+N[i][0];
ty=que[head].y+N[i][1];
if(tx<1||tx>n||ty<1||ty>m){
continue;
}
if(A[tx][ty]>='A'&&A[tx][ty]<='Z'){
B[tx][ty]=1;
f=1;
if(tx==Z[A[tx][ty]-'0'].x1&&ty==Z[A[tx][ty]-'0'].y1){
p=Z[A[tx][ty]-'0'].y2;
tx=Z[A[tx][ty]-'0'].x2;
ty=p;
}else{
p=Z[A[tx][ty]-'0'].y1;
tx=Z[A[tx][ty]-'0'].x1;
ty=p;
}
}
if(B[tx][ty]==0&&A[tx][ty]!='#'){
if(f==1){
f=0;
}else{
B[tx][ty]=1;
}
que[tail].x=tx;
que[tail].y=ty;
que[tail].s=que[head].s+1;
tail++;
if(tx==zx&&ty==zy){
cout<<que[tail-1].s;
return 0;
}
}
}
head++;
}
return 0;
}