#include <bits/stdc++.h>
using namespace std;
int n,m;
char a[305][305];
struct str{
int xa[3],ya[3],l;
int flagg;
} c[30];
struct st{
int x,y,bu;
int flag;
};
queue<st>q;
int fun(){
while(!q.empty()){
st b=q.front();
q.pop();
if(b.x<0||b.x>=n||b.y<0||b.y>=m||a[b.x][b.y]=='#')continue;
if(a[b.x][b.y]=='='){
return b.bu;
}
if(a[b.x][b.y]>='A'&&a[b.x][b.y]<='Z'&&b.flag==0){
if(c[a[b.x][b.y]-'A'].xa[0]==b.x&&c[a[b.x][b.y]-'A'].ya[0]==b.y){
q.push({c[a[b.x][b.y]-'A'].xa[1],c[a[b.x][b.y]-'A'].ya[1],b.bu,1});
}else{
q.push({c[a[b.x][b.y]-'A'].xa[0],c[a[b.x][b.y]-'A'].ya[0],b.bu,1});
}
}else{
q.push({b.x+1,b.y,b.bu+1,0});
q.push({b.x-1,b.y,b.bu+1,0});
q.push({b.x,b.y+1,b.bu+1,0});
q.push({b.x,b.y-1,b.bu+1,0});
}
if(a[b.x][b.y]>='A'&&a[b.x][b.y]<='Z'){}
else{
a[b.x][b.y]='#';
}
}
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];
if(a[i][j]=='@'){
q.push({i,j,0,0});
}
if(a[i][j]>='A'&&a[i][j]<='Z'){
c[a[i][j]-'A'].xa[c[a[i][j]-'A'].l]=i;
c[a[i][j]-'A'].ya[c[a[i][j]-'A'].l]=j;
c[a[i][j]-'A'].flagg=1;
c[a[i][j]-'A'].l++;
}
}
}
cout<<fun();
return 0;
}