#include<bits/stdc++.h>
using namespace std;
int n,m,sx,sy,minn=1000000;
struct St{
int a,b,k;
};
queue<St> q;
char a[305][305];
int fx[5]={0,0,1,0,-1};
int fy[5]={0,1,0,-1,0};
void f(int x,int y){
a[x][y]='#';
q.push({x,y});
while(!q.empty()){
St aa=q.front();
for(int i=1;i<=4;i++){
int kx=aa.a+fx[i];
int ky=aa.b+fy[i];
if(kx>=1&&ky>=1&&kx<=n&&ky<=m&&a[kx][ky]!='#'&&a[kx][ky]!='$'){
if(a[kx][ky]!='.'&&a[kx][ky]!='='&&a[kx][ky]!='#'&&a[kx][ky]!='$'){
for(int tx=1;tx<=n;tx++){
for(int ty=1;ty<=m;ty++){
if(a[tx][ty]==a[kx][ky]){
q.push({tx,ty,aa.k+1});
a[kx][ky]='$';
}
}
}
}else if(a[kx][ky]=='.'){
q.push({kx,ky,aa.k+1});
a[kx][ky]='$';
}else if(a[kx][ky]=='='){
if(aa.k+1<minn){
minn=aa.k+1;
}
}
}
}
q.pop();
}
}
int main(){
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]=='@'){
a[i][j]='.';
sx=i;
sy=j;
}
}
}
f(sx,sy);
cout<<minn;
return 0;
}