#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD = 1e9+7;
const int N = 505;
const short dx[]={1,0,-1,0};
const short dy[]={0,1,0,-1};
int n,m,xa,xb,ya,yb;
int sum[N][N],cana[N][N];
bool vis[N][N];
string s[N];
bool ok(int x,int y){
if(x<1||y<1||x>n||y>n||s[x][y]=='X')return false;
return true;
}
int getsum(int x1,int y1,int x2,int y2){
return sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1];
}
bool solve(int k){
if(m==1){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(!cana[i][j])continue;
int ss=getsum(max(1,i-k-1),max(1,j-k-1),min(n,i+k+1),min(n,j+k+1));
if(i-k-1>=1&&j-k-1>=1)ss-=getsum(i-k-1,j-k-1,i-k-1,j-k-1);
if(i-k-1>=1&&j+k+1<=n)ss-=getsum(i-k-1,j+k+1,i-k-1,j+k+1);
if(i+k+1<=n&&j-k-1>=1)ss-=getsum(i+k+1,j-k-1,i+k+1,j-k-1);
if(i+k+1<=n&&j+k+1<=n)ss-=getsum(i+k+1,j+k+1,i+k+1,j+k+1);
if(ss>0)return true;
}
}
return false;
}
}
int main(){
ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>s[i];
s[i]="#"+s[i];
for(int j=1;j<=n;j++){
if(s[i][j]=='A'){
xa=i;
ya=j;
}else if(s[i][j]=='B'){
xb=i;
yb=j;
}
}
}
queue<pair<int,int> >q;
q.push({xb,yb});
while(!q.empty()){
pair<int,int> e=q.front();
q.pop();
sum[e.first][e.second]=1;
for(int i=0;i<4;i++){
int newx=e.first+dx[i];
int newy=e.second+dy[i];
if(ok(newx,newy)&&!sum[newx][newy])q.push({newx,newy});
}
}
if(sum[xa][ya]){
cout<<-1;
return 0;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+sum[i][j];
}
}
q.push({xa,ya});
while(!q.empty()){
pair<int,int> e=q.front();
q.pop();
cana[e.first][e.second]=1;
for(int i=0;i<4;i++){
int newx=e.first+dx[i];
int newy=e.second+dy[i];
if(ok(newx,newy)&&!cana[newx][newy])q.push({newx,newy});
}
}
int lo=1;
int hi=n;
int ans=n;
while(lo<=hi){
int mid=(lo+hi)>>1;
if(solve(mid)){
hi=mid-1;
ans=mid;
}else{
lo=mid+1;
}
}
cout<<ans;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwpjb25zdCBsbCBNT0QgPSAxZTkrNzsKY29uc3QgaW50IE4gPSA1MDU7CmNvbnN0IHNob3J0IGR4W109ezEsMCwtMSwwfTsKY29uc3Qgc2hvcnQgZHlbXT17MCwxLDAsLTF9OwoKaW50IG4sbSx4YSx4Yix5YSx5YjsKaW50IHN1bVtOXVtOXSxjYW5hW05dW05dOwpib29sIHZpc1tOXVtOXTsKc3RyaW5nIHNbTl07Cgpib29sIG9rKGludCB4LGludCB5KXsKICAgIGlmKHg8MXx8eTwxfHx4Pm58fHk+bnx8c1t4XVt5XT09J1gnKXJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwp9CgppbnQgZ2V0c3VtKGludCB4MSxpbnQgeTEsaW50IHgyLGludCB5Mil7CiAgICByZXR1cm4gc3VtW3gyXVt5Ml0tc3VtW3gyXVt5MS0xXS1zdW1beDEtMV1beTJdK3N1bVt4MS0xXVt5MS0xXTsKfQoKYm9vbCBzb2x2ZShpbnQgayl7CiAgICBpZihtPT0xKXsKICAgICAgICBmb3IoaW50IGk9MTtpPD1uO2krKyl7CiAgICAgICAgICAgIGZvcihpbnQgaj0xO2o8PW47aisrKXsKICAgICAgICAgICAgICAgIGlmKCFjYW5hW2ldW2pdKWNvbnRpbnVlOwogICAgICAgICAgICAgICAgaW50IHNzPWdldHN1bShtYXgoMSxpLWstMSksbWF4KDEsai1rLTEpLG1pbihuLGkraysxKSxtaW4obixqK2srMSkpOwogICAgICAgICAgICAgICAgaWYoaS1rLTE+PTEmJmotay0xPj0xKXNzLT1nZXRzdW0oaS1rLTEsai1rLTEsaS1rLTEsai1rLTEpOwogICAgICAgICAgICAgICAgaWYoaS1rLTE+PTEmJmoraysxPD1uKXNzLT1nZXRzdW0oaS1rLTEsaitrKzEsaS1rLTEsaitrKzEpOwogICAgICAgICAgICAgICAgaWYoaStrKzE8PW4mJmotay0xPj0xKXNzLT1nZXRzdW0oaStrKzEsai1rLTEsaStrKzEsai1rLTEpOwogICAgICAgICAgICAgICAgaWYoaStrKzE8PW4mJmoraysxPD1uKXNzLT1nZXRzdW0oaStrKzEsaitrKzEsaStrKzEsaitrKzEpOwoKICAgICAgICAgICAgICAgIGlmKHNzPjApcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIH0KfQoKaW50IG1haW4oKXsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpO2Npbi50aWUoMCk7Y291dC50aWUoMCk7CiAgICBjaW4+Pm4+Pm07CgogICAgZm9yKGludCBpPTE7aTw9bjtpKyspewogICAgICAgIGNpbj4+c1tpXTsKICAgICAgICBzW2ldPSIjIitzW2ldOwogICAgICAgIGZvcihpbnQgaj0xO2o8PW47aisrKXsKICAgICAgICAgICAgaWYoc1tpXVtqXT09J0EnKXsKICAgICAgICAgICAgICAgIHhhPWk7CiAgICAgICAgICAgICAgICB5YT1qOwogICAgICAgICAgICB9ZWxzZSBpZihzW2ldW2pdPT0nQicpewogICAgICAgICAgICAgICAgeGI9aTsKICAgICAgICAgICAgICAgIHliPWo7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcXVldWU8cGFpcjxpbnQsaW50PiA+cTsKICAgIHEucHVzaCh7eGIseWJ9KTsKCiAgICB3aGlsZSghcS5lbXB0eSgpKXsKICAgICAgICBwYWlyPGludCxpbnQ+IGU9cS5mcm9udCgpOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgc3VtW2UuZmlyc3RdW2Uuc2Vjb25kXT0xOwogICAgICAgIGZvcihpbnQgaT0wO2k8NDtpKyspewogICAgICAgICAgICBpbnQgbmV3eD1lLmZpcnN0K2R4W2ldOwogICAgICAgICAgICBpbnQgbmV3eT1lLnNlY29uZCtkeVtpXTsKCiAgICAgICAgICAgIGlmKG9rKG5ld3gsbmV3eSkmJiFzdW1bbmV3eF1bbmV3eV0pcS5wdXNoKHtuZXd4LG5ld3l9KTsKICAgICAgICB9CiAgICB9CgogICAgaWYoc3VtW3hhXVt5YV0pewogICAgICAgIGNvdXQ8PC0xOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKXsKICAgICAgICBmb3IoaW50IGo9MTtqPD1uO2orKyl7CiAgICAgICAgICAgIHN1bVtpXVtqXT1zdW1baS0xXVtqXStzdW1baV1bai0xXS1zdW1baS0xXVtqLTFdK3N1bVtpXVtqXTsKICAgICAgICB9CiAgICB9CgogICAgcS5wdXNoKHt4YSx5YX0pOwogICAgd2hpbGUoIXEuZW1wdHkoKSl7CiAgICAgICAgcGFpcjxpbnQsaW50PiBlPXEuZnJvbnQoKTsKICAgICAgICBxLnBvcCgpOwogICAgICAgIGNhbmFbZS5maXJzdF1bZS5zZWNvbmRdPTE7CiAgICAgICAgZm9yKGludCBpPTA7aTw0O2krKyl7CiAgICAgICAgICAgIGludCBuZXd4PWUuZmlyc3QrZHhbaV07CiAgICAgICAgICAgIGludCBuZXd5PWUuc2Vjb25kK2R5W2ldOwoKICAgICAgICAgICAgaWYob2sobmV3eCxuZXd5KSYmIWNhbmFbbmV3eF1bbmV3eV0pcS5wdXNoKHtuZXd4LG5ld3l9KTsKICAgICAgICB9CiAgICB9CgoKCgogICAgaW50IGxvPTE7CiAgICBpbnQgaGk9bjsKICAgIGludCBhbnM9bjsKICAgIHdoaWxlKGxvPD1oaSl7CiAgICAgICAgaW50IG1pZD0obG8raGkpPj4xOwogICAgICAgIGlmKHNvbHZlKG1pZCkpewogICAgICAgICAgICBoaT1taWQtMTsKICAgICAgICAgICAgYW5zPW1pZDsKICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgbG89bWlkKzE7CiAgICAgICAgfQogICAgfQoKICAgIGNvdXQ8PGFuczsKICAgIHJldHVybiAwOwp9