#include<cstdio>
#include<queue>
using std::queue;
const int walk[4][2]{
{0,1},{1,0},{0,-1},{-1,0}
};
struct coord{
int x,y,step;
};
queue<coord> q;
int main(){
int n,m;
scanf("%d%d",&n,&m);
char v[301][301];
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j){
scanf("%c",&v[i][j]);
if(v[i][j]=='@')
q.push((coord){i,j,0});
}
coord u=q.front();q.pop();
while(v[u.x][u.y]!='='){
for(int i=0,nx=0,ny=0;i<4;++i){
nx=u.x+walk[i][0];
ny=u.y+walk[i][1];
if(v[nx][ny]>='A'&&v[nx][ny]<='Z'){
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(v[nx][ny]==v[i][j]&&nx!=i){
q.push((coord){i,j,u.step+1});
v[nx][ny]='#';break;
}
}
if(v[nx][ny]!='#'&&nx>0&&nx<=n&&ny>0&&ny<=m)
q.push((coord){nx,ny,u.step+1});
}
v[u.x][u.y]='#';
q.front();q.pop();
}
printf("%d",u.step);
return 0;
}