#include<bits/stdc++.h>
using namespace std;
int n,m;
char a[305][305];
struct loc{
int x,y,step;
}st,ed,now,nt;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
queue<loc> q;
void bfs(){
q.push(st);
while(!q.empty()){
now=q.front();
q.pop();
for(int i=0;i<4;i++){
nt.x=now.x+dx[i];
nt.y=now.y+dy[i];
nt.step=now.step+1;
if(nt.x<1||nt.x>n) continue;
if(nt.y<1||nt.y>m) continue;
if(a[nt.x][nt.y]=='#') continue;
if(a[nt.x][nt.y]>='A'&&a[nt.x][nt.y]<='Z'){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(i==nt.x&&j==nt.y) continue;
if(a[i][j]==a[nt.x][nt.y]){
nt.x=i,nt.y=j;
break;
}
}
}
}
if(nt.x==ed.x&&nt.y==ed.y){
printf("%d",nt.step);
return;
}
a[nt.x][nt.y]='#';
q.push(nt);
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%c",&a[i][j]);
if(a[i][j]=='@') st.x=i,st.y=j,a[i][j]='#';
if(a[i][j]=='=') ed.x=i,ed.y=j,a[i][j]='.';
}
getchar();
}
st.step=0;
bfs();
return 0;
}