#include <bits/stdc++.h>
using namespace std;
int n, m, dx[] = {0, -1, 1, 0}, dy[] = {1, 0, 0, -1};
char a[305][305];
int dis[305][305];
int visx[305], visy[305], px[305][305], py[305][305];
bool v[100], vis[305][305];//传送回来的时候和dis不一样,不能两个都标记啊,阿sir
queue<pair<int,int> >q;
int main()
{
ios::sync_with_stdio(0);
cin.tie(NULL),cout.tie(NULL);
freopen("P1825_6.in","r",stdin);
freopen("P1825.out","w",stdout);
cin>>n>>m;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
{
cin>>a[i][j];
if(a[i][j] == '=')
{
q.push(make_pair(i,j));
vis[i][j] = 1;
}
if(a[i][j] >= 'A' && a[i][j] <= 'Z')
if(v[a[i][j] - 'A'])
{
px[i][j] = visx[a[i][j] - 'A'],
py[i][j] = visy[a[i][j] - 'A'],
px[visx[a[i][j] - 'A']][visy[a[i][j] - 'A']] = i,
py[visx[a[i][j] - 'A']][visy[a[i][j] - 'A']] = j;
}
else v[a[i][j] - 'A'] = 1, visx[a[i][j] - 'A'] = i, visy[a[i][j] - 'A'] = j;
}
while(q.size())
{
for(int i = 0; i < 4; ++i)
{
int x=q.front().first + dx[i],
y=q.front().second + dy[i];
if(vis[x][y])continue;
vis[x][y] = 1;
if(a[x][y] == '#')continue;
if(x < 1 || y < 1 || x > n || y > m)continue;
dis[x][y] = dis[q.front().first][q.front().second] + 1;
if(a[x][y] == '@'){cout<<dis[x][y];return 0;}
if(a[x][y] == '.'){q.push(make_pair(x, y));}
else
{
dis[px[x][y]][py[x][y]] = dis[x][y];
q.push(make_pair(px[x][y], py[x][y]));
}
}
q.pop();
}
}