#include<bits/stdc++.h>
using namespace std;
#define int long long
#define WA return 0;
const int N=1e5+2;
const int dx[4]={0,0,-1,1},dy[4]={-1,1,0,0};
int n,m,a,b;
bool d[1000][1000];
char s[1000][1000];
struct Object{
int x,y;
}st,ed;
queue<Object> q;
map<char,Object> mp;
signed main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>s[i][j];
if(s[i][j]=='@')st.x=i,st.y=j;
if(s[i][j]=='=')ed.x=i,ed.y=j;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(s[i][j]>='A'&&s[i][j]<='Z'){
int wc,nm;
int am=mp[s[i][j]].x,ns=mp[s[i][j]].y;
if(!am==0&&!ns==0){
ed.x+ed.y-am-ns<0?wc=-ed.x-ed.y+am+ns:wc=ed.x+ed.y-am-ns;
ed.x+ed.y-i-j<0?nm=-ed.x-ed.y+i+j:nm=ed.x+ed.y-i-j;
if(wc>nm)mp[s[i][j]].x=i,mp[s[i][j]].y=j;
}else mp[s[i][j]].x=i,mp[s[i][j]].y=j;
}
}
}
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)d[i][j]=-1;
while(q.size())q.pop();
q.push(st);
while(q.size()){
Object now=q.front();q.pop();
if(s[now.x][now.y]>='A'&&s[now.x][now.y]<='Z')now=mp[s[now.x][now.y]];
for(int i=0;i<4;i++){
Object next;
next.x=now.x+dx[i];
next.y=now.y+dy[i];
if(next.x>=1&&next.y>=1&&next.x<=n&&next.y<=m&&s[next.x][next.y]!='#')continue;
if(d[next.x][next.y]==-1){
d[next.x][next.y]=d[now.x][now.y]+1;
q.push(next);
}
}
}
cout<<d[ed.x][ed.y];
WA;
}