#include<bits/stdc++.h>
using namespace std;

const int maxN = 510;

struct polje {int i; int j;};
int n, k;
char mat[maxN][maxN];
bool pos[maxN][maxN];
vector<polje> regijeOne, regijeTwo;
const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, -1, 0, 1};
int iA, jA, iB, jB;

void dfsRegije(int i, int j, const int& x) {
    if(x == 1 && mat[i][j] == 'B') {
        cout << 0;
        exit(0);
    }
    if(i < 0 || i >= n ||
       j < 0 || j >= n ||
       mat[i][j] == 'X')
        return;
    if(pos[i][j])
        return;
    if(x == 1)
        regijeOne.push_back({i, j});
    else
        regijeTwo.push_back({i, j});
    pos[i][j] = true;

    for(int pr = 0; pr < 4; ++pr)
        dfsRegije(i + dx[pr], j + dy[pr], x);
}
int aps(int a, int b) {
    if(a > b)
        return a - b;
    return b - a;
}
int minOverall, minTren;
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    cin >> n >> k;
    for(int i = 0; i < n; ++i)
        for(int j = 0; j < n; ++j) {
            cin >> mat[i][j];
            if(mat[i][j] == 'A')
            {iA = i, jA = j;}
            if(mat[i][j] == 'B')
            {iB = i, jB = j;}
        }

    dfsRegije(iA, jA, 1);
    dfsRegije(iB, jB, 2);

    /*for(int i = 0; i < regijeOne.size(); ++i)
        cout << regijeOne[i].i << ' ' << regijeOne[i].j << endl;
    cout << endl;
    for(int i = 0; i < regijeTwo.size(); ++i)
        cout << regijeTwo[i].i << ' ' << regijeTwo[i].j << endl;
    cout << endl;*/


    minOverall = minTren = 2e4;
    for(int i = 0; i < regijeOne.size(); ++i) {
        for(int j = 0; j < regijeTwo.size(); ++j) {
            minTren = min(minTren, max(aps(regijeOne[i].i, regijeTwo[j].i), aps(regijeOne[i].j, regijeTwo[j].j)));
        }
        minOverall = min(minTren, minOverall);
    }
    if(regijeOne.size() == 1 && regijeTwo.size() == 1){
        if(regijeOne[0].i != regijeTwo[0].i && regijeOne[0].j != regijeTwo[0].j)
            cout << minOverall;
        else
            cout << minOverall - 1;
    }
    else
        cout << minOverall - 1;
    return 0;
}
/*
6 1
A.XX..
..XX..
XXXX..
..XX..
..XX..
..XX.B
*/