#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
typedef pair<int,int> PII;
const int N=500;
vector<PII>tra;
char a[N][N];
int num[N][N];
bool st[N][N];
int n,m,res,fx,fy;
void bfs(int x,int y)
{
queue<PII>q;
q.push({x,y});
while(q.size())
{
PII t=q.front();
q.pop();
if(a[t.first][t.second]=='=') break;
for(int i=0;i<4;i++)
{
int xx=t.first+dx[i],yy=t.second+dy[i];
if(a[xx][yy]>='A'&&a[xx][yy]<='Z')
{
num[xx][yy]=num[t.first][t.second]+1;
int len=tra.size();
for(int k=0;k<len;k++)
{
if((tra[k].first!=xx||tra[k].second!=yy)&&a[tra[k].first][tra[k].second]==a[xx][yy])
{
num[tra[k].first][tra[k].second]=num[xx][yy];
q.push(tra[k]);
break;
}
}
}
else if((a[xx][yy]=='.'||a[xx][yy]=='=')&&st[xx][yy]==false&&xx>=1&&xx<=n&&yy>=1&&yy<=m)
{
st[xx][yy]=true;
num[xx][yy]=num[t.first][t.second]+1;
q.push({xx,yy});
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++) cin>>a[i][j];
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]>='A'&&a[i][j]<='Z') tra.push_back({i,j});
else if(a[i][j]=='=') fx=i,fy=j;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]=='@') bfs(i,j);
}
}
cout<<num[fx][fy];
}