#include<bits/stdc++.h>
using namespace std;
int n,m;
char maze[303][303];
int q[4][903];
int head,tail;
int sx,sy,ex,ey;
int dx[]={-1,0,1,0},dy[]={0,-1,0,1};
int bfs()
{
head=tail=1;
q[1][1]=sx;
q[2][1]=sy;
q[3][1]=0;
while(head<=tail)
{
int x=q[1][head];
int y=q[2][head];
for(int k=0;k<4;k++)
{
int nx=x+dx[k];
int ny=y+dy[k];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&maze[nx][ny]!='#')
{
tail++;
q[3][tail]=q[3][head]+1;
char goal=maze[nx][ny];
maze[nx][ny]='#';
if(goal=='.')
{
q[1][tail]=nx;
q[2][tail]=ny;
}
else
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(maze[i][j]==goal)
{
q[1][tail]=nx=i;
q[2][tail]=ny=j;
maze[i][j]='#';
}
}
}
}
}
if(nx==ex&&ny==ey)
{
return q[3][tail];
}
}
head++;
}
return -1;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>maze[i][j];
if(maze[i][j]=='@')
{
sx=i,sy=j;
maze[i][j]='.';
}
if(maze[i][j]=='=')
{
ex=i,ey=j;
maze[i][j]='.';
}
}
}
cout<<bfs()<<"\n";
return 0;
}