#include <bits/stdc++.h>
using namespace std;
int n,m,dx,dy,xx,yy,sx,sy;
string a[305];
bool vis[305][305],v[305][305],flag=true;
int f[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int c[305][305];
queue<int> q1,q2;
int main(){
cin >> n >> m;
for (int i = 0;i < n;i++) cin >> a[i];
for (int i = 0;i < n;i++){
for (int j = 0;j < m;j++){
if (a[i][j] == '@'){sx=i;sy=j;}
else if (a[i][j] == '#') vis[i][j]=1;
}
}
q1.push(sx);q2.push(sy);c[sx][sy]=0;
while (!q1.empty()){
xx=q1.front();yy=q2.front();
q1.pop();q2.pop();
for (int i = 0;i < 4;i++){
dx=xx+f[i][0];dy=yy+f[i][1];
if (dx >= 0 && dx < n && dy >= 0 && dy < m && !vis[dx][dy]){
if (a[dx][dy] == '.'){q1.push(dx);q2.push(dy);vis[dx][dy]=1;c[dx][dy]=c[xx][yy]+1;}
else if ('A' <= a[dx][dy] && a[dx][dy] <= 'Z'){
if (v[dx][dy]) v[dx][dy]=0;
else{
c[dx][dy]=c[xx][yy]+1;
v[dx][dy]=1;
flag=true;
for (int j = 0;j < n;j++){
for (int k = 0;k < m;k++){
if (j == dx && k == dy) continue;
else if (a[j][k] == a[dx][dy]){q1.push(j);q2.push(k);c[j][k]=c[dx][dy];flag=false;break;}
}if (!flag) break;
}
}
}
else if (a[dx][dy] == '='){
c[dx][dy]=c[xx][yy]+1;
cout << c[dx][dy];
return 0;
}
}
}
}
return 0;
}