#include<bits/stdc++.h>
using namespace std;
char mp[305][305];
int n,m;
int f[305][305],fg[305][305];
int gx[5]={0,1,0,-1,0},gy[5]={0,0,1,0,-1};
bool flag;
int bfs()
{
queue<int> x;
queue<int> y;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(mp[i][j]=='@')
x.push(i),y.push(j);
while(!x.empty())
{
int nx=x.front(),ny=y.front();
x.pop();y.pop();
for(int i=1;i<=4;i++)
{
int tx=nx+gx[i],ty=ny+gy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=m)
{
flag=0;
if(mp[nx][ny]>='A'&&mp[nx][ny]<='Z')
flag=1;
if(mp[tx][ty]=='#')continue;
if(mp[tx][ty]=='.'&&!f[tx][ty])
{
f[tx][ty]=(flag?fg[nx][ny]+1:f[nx][ny]+1);
x.push(tx);y.push(ty);
}
if(mp[tx][ty]=='=')
{
f[tx][ty]=(flag?fg[nx][ny]+1:f[nx][ny]+1);
return f[nx][ny]+1;
}
if(mp[tx][ty]>='A'&&mp[tx][ty]<='Z'&&!f[tx][ty])
{
char c=mp[tx][ty];
f[tx][ty]=(flag?fg[nx][ny]+1:f[nx][ny]+1);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(mp[i][j]==c&&(i!=tx||j!=ty))
{
fg[i][j]=f[nx][ny]+1;
x.push(i);y.push(j);
}
}
}
}
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>mp[i][j];
cout<<bfs()<<endl;
return 0;
}