#include<iostream>
#include<queue>
using namespace std;
const int N=310;
char map[N][N];
int map1[N][N],ans[N][N]={0};
int m,n;
int dx[5]={0,-1,1,0,0};
int dy[5]={0,0,0,-1,1};
int x1,y1,x2,y2;
void bfs(int x,int y)
{
queue<int> q[2];
q[0].push(x);
q[1].push(y);
map1[x][y]=1;
while(!q[0].empty())
{
x=q[0].front() ;
y=q[1].front() ;
q[0].pop();
q[1].pop();
if(map[x][y]=='=')
{
cout<<ans[x][y]<<endl;
return ;
}
if(map[x][y]<='Z'&&map[x][y]>='A')
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(map[i][j]==map[x][y]&&(i!=x||j!=y))
{
x=i;
y=j;
map1[i][j]==1;
}
}
}
}
int x3,y3;
for(int i=1;i<=4;i++)
{
x3=x+dx[i];
y3=y+dy[i];
if(x3<=n&&y3<=m&&x3>=1&&y3>=1&&!map1[x3][y3]&&map[x3][y3]!='#')
{
q[0].push(x3);
q[1].push(y3);
ans[x3][y3]=ans[x][y]+1;
map1[x3][y3]=1;
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>map[i][j];
if(map[i][j]=='@')
{
x1=i;
y1=j;
}
}
}
bfs(x1,y1);
return 0;
}