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

int n, m;
int si, sj, ei, ej;
char mat[505][505], mat1[505][505];
int bla[505][505];
bool moze;
bool visited[505][505];

void doIt(int x, int y, int k, int ostalo)
{
    visited[x][y] = true;
    if(mat[x][y] == 'B'){moze = true; return;}

    if(ostalo){
        for(int i = max(x - k, 0); i <= min(x + k, n - 1); ++i){
            for(int j = max(y - k, 0); j <= min(y + k, n - 1); ++j){
                ++bla[i][j];
                mat[i][j] = (mat[i][j] != 'A' && mat[i][j] != 'B') ? '.' : mat[i][j];
            }
        }

        if(x - 1 >= 0 && !visited[x - 1][y] && mat[x - 1][y] != 'X'){doIt(x - 1, y, k, ostalo - 1);}
        if(y + 1 < n && !visited[x][y + 1] && mat[x][y + 1] != 'X'){doIt(x, y + 1, k, ostalo - 1);}
        if(x + 1 < n && !visited[x + 1][y] && mat[x + 1][y] != 'X'){doIt(x + 1, y, k, ostalo - 1);}
        if(y - 1 >= 0 && !visited[x][y - 1] && mat[x][y - 1] != 'X'){doIt(x, y - 1, k, ostalo - 1);}

        for(int i = max(x - k, 0); i <= min(x + k, n - 1); ++i){
            for(int j = max(y - k, 0); j <= min(y + k, n - 1); ++j){
                --bla[i][j];
                if(bla[i][j] == 0){mat[i][j] = mat1[i][j];}
            }
        }
    }

    if(x - 1 >= 0 && !visited[x - 1][y] && mat[x - 1][y] != 'X'){doIt(x - 1, y, k, ostalo);}
    if(y + 1 < n && !visited[x][y + 1] && mat[x][y + 1] != 'X'){doIt(x, y + 1, k, ostalo);}
    if(x + 1 < n && !visited[x + 1][y] && mat[x + 1][y] != 'X'){doIt(x + 1, y, k, ostalo);}
    if(y - 1 >= 0 && !visited[x][y - 1] && mat[x][y - 1] != 'X'){doIt(x, y - 1, k, ostalo);}

    visited[x][y] = false;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

    cin >> n >> m;

    for(int i = 0; i < n; ++i){
        for(int j = 0; j < n; ++j){
            cin >> mat[i][j];
            mat1[i][j] = mat[i][j];
            if(mat[i][j] == 'A'){
                si = i; sj = j;
            }
            if(mat[i][j] == 'B'){
                ei = i; ej = j;
            }
        }
    }

    int l = 0, r = 250;
    while(l != r){
        int mid = (l + r) / 2;

        for(int i = 0; i < n; ++i){
            for(int j = 0; j < n; ++j){
                visited[i][j] = false;
            }
        }

        moze = false;
        doIt(si, sj, mid, m);

        if(moze){
            r = mid;
        }
        else{
            l = mid + 1;
        }
    }

    cout << l << "\n";

    return 0;
}