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

}
OK=0;
_DFS(x,y,First,i,j,k);
}

void Main1(int n){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

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,-1,-1,0);


while(l<r){
    int k=(l+r)/2;



    for(int i=0;i<n;i++){
          for(int j=0;j<n;j++){
            if(CanGo[i][j]=='O')continue;



        OK=0;
        DFS(x,y,0,i,j,k);
        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);
}
}