#include <bits/stdc++.h>
using namespace std;
vector <string> a;
vector <string> cpy;
vector <string> CanGo;
bool OK=0;
void DFS(int x,int y,bool First=false){
if(x<0||y<0||x>=a.size()||y>=a.size())return;
//if(OK)return;
if(cpy[x][y]=='B'){cpy[x][y]='Z';OK=1;return;}
if(cpy[x][y]!='.'&&cpy[x][y]!='A')return;
cpy[x][y]='Z';
//if(First)cout <<"Damn "<<x<<" "<<y<<endl;
if(First)CanGo[x][y]='X';
DFS(x+1,y,First);
DFS(x-1,y,First);
DFS(x,y+1,First);
DFS(x,y-1,First);
}

void Main1(int n){
a.resize(n);
int x=0;
int y=0;
CanGo.resize(n);
for(int i=0;i<n;i++){
    cin >>a[i];
    for(int j=0;j<n;j++)if(a[i][j]=='A'){x=i;y=j;}
}
for(int i=0;i<n;i++)for(int j=0;j<n;j++)CanGo[i]+='O';

int l=0;
int r=n/2;
cpy=a;
DFS(x,y,1);
while(l<r){
    int k=(l+r)/2;

    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
             cpy=a;if(CanGo[i][j]!='X')continue;

        for(int xx=max(0,i-k);xx<min(i+k+1,n);xx++)
                for(int yy=max(0,j-k);yy<min(j+k+1,n);yy++){
                    if(a[xx][yy]=='X')a[xx][yy]='.';
                }
        OK=0;
        DFS(x,y);
        if(OK){
           //     cout <<"OK "<<k<<endl;
            r=k-1;

        }
        }
    }
        if(r!=k-1)l=k+1;

}
cout <<l<<endl;

}
int main(){
int n,m;
cin >>n>>m;
if(m==1){
    Main1(n);
}
}