#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
#define FOR(i,a,b) for(int i=a; i<=b; ++i)
#define FORR(i,a,b) for(int i=a; i>=b; --i)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define sz(x) x.size()
template<class T>
bool maximize(T &a, T b) {
if (a < b) {a = b; return true;}
return false;
}
template<class T>
bool minimize(T &a, T b) {
if (a > b) {a = b; return true;}
return false;
}
const int inf = INT_MAX;
const ll LLinf = LONG_LONG_MAX;
const int MOD = 1e9 + 7;
const int N = 100 + 5;
const int dx[] = {0, 0, 1, -1}; // (x+0, x+0, x+1, x-1)
const int dy[] = {1, -1, 0, 0}; // (y+1, y-1, y+0, y+0)
int dist[N][N];
char a[N][N];
bool vis[N][N];
void solve(){
int n, m;
cin >> n >> m;
queue<pair<int, int>> q; // lưu các ô (i, j)
memset(dist, 0x3f, sizeof dist); // +oo
FOR(i,1,n)
FOR(j,1,m){
cin >> a[i][j];
if (a[i][j] == 'C') dist[i][j] = 0, vis[i][j] =true, q.push(mp(i, j));
}
while(!q.empty()){
int x = q.front().fi;
int y = q.front().se;
q.pop();
if (a[x][y] == 'B') cout << dist[x][y], exit(0);
FOR(i,0,3){
int x1 = x + dx[i];
int y1 = y + dy[i];
if (x1 > 0 && x1 <= n && y1 > 0 && y1 <= m && dist[x1][y1] > dist[x][y] && a[x1][y1] != '*' && !vis[x1][y1]) {
vis[x1][y1] = true;
dist[x1][y1] = dist[x][y] + 1, q.push(mp(x1, y1));
}
}
}
cout << -1;
}
main(){
// icebear hehehhe
cin.tie(0) -> sync_with_stdio(0);
cout.tie(0);
int t = 1;
while(t--) solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiBwYWlyPGludCwgaW50PiBwaWk7CgojZGVmaW5lIEZPUihpLGEsYikgZm9yKGludCBpPWE7IGk8PWI7ICsraSkKI2RlZmluZSBGT1JSKGksYSxiKSBmb3IoaW50IGk9YTsgaT49YjsgLS1pKQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSwgeC5lbmQoKQojZGVmaW5lIHN6KHgpIHguc2l6ZSgpCgp0ZW1wbGF0ZTxjbGFzcyBUPgogICAgYm9vbCBtYXhpbWl6ZShUICZhLCBUIGIpIHsKICAgIGlmIChhIDwgYikge2EgPSBiOyByZXR1cm4gdHJ1ZTt9CiAgICByZXR1cm4gZmFsc2U7Cn0KCnRlbXBsYXRlPGNsYXNzIFQ+CiAgICBib29sIG1pbmltaXplKFQgJmEsIFQgYikgewogICAgaWYgKGEgPiBiKSB7YSA9IGI7IHJldHVybiB0cnVlO30KICAgIHJldHVybiBmYWxzZTsKfQoKY29uc3QgaW50IGluZiA9IElOVF9NQVg7CmNvbnN0IGxsIExMaW5mID0gTE9OR19MT05HX01BWDsKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7CmNvbnN0IGludCBOID0gMTAwICsgNTsKY29uc3QgaW50IGR4W10gPSB7MCwgMCwgMSwgLTF9OyAvLyAoeCswLCB4KzAsIHgrMSwgeC0xKQpjb25zdCBpbnQgZHlbXSA9IHsxLCAtMSwgMCwgMH07IC8vICh5KzEsIHktMSwgeSswLCB5KzApCgppbnQgZGlzdFtOXVtOXTsKY2hhciBhW05dW05dOwpib29sIHZpc1tOXVtOXTsKCnZvaWQgc29sdmUoKXsKICAgIGludCBuLCBtOwogICAgY2luID4+IG4gPj4gbTsKICAgIHF1ZXVlPHBhaXI8aW50LCBpbnQ+PiBxOyAvLyBsxrB1IGPDoWMgw7QgKGksIGopCiAgICBtZW1zZXQoZGlzdCwgMHgzZiwgc2l6ZW9mIGRpc3QpOyAvLyArb28KICAgIEZPUihpLDEsbikKICAgICAgICBGT1IoaiwxLG0pewogICAgICAgICAgICBjaW4gPj4gYVtpXVtqXTsKICAgICAgICAgICAgaWYgKGFbaV1bal0gPT0gJ0MnKSBkaXN0W2ldW2pdID0gMCwgdmlzW2ldW2pdID10cnVlLCBxLnB1c2gobXAoaSwgaikpOwogICAgICAgIH0KICAgIHdoaWxlKCFxLmVtcHR5KCkpewogICAgICAgIGludCB4ID0gcS5mcm9udCgpLmZpOwogICAgICAgIGludCB5ID0gcS5mcm9udCgpLnNlOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgaWYgKGFbeF1beV0gPT0gJ0InKSBjb3V0IDw8IGRpc3RbeF1beV0sIGV4aXQoMCk7CiAgICAgICAgRk9SKGksMCwzKXsKICAgICAgICAgICAgaW50IHgxID0geCArIGR4W2ldOwogICAgICAgICAgICBpbnQgeTEgPSB5ICsgZHlbaV07CiAgICAgICAgICAgIGlmICh4MSA+IDAgJiYgeDEgPD0gbiAmJiB5MSA+IDAgJiYgeTEgPD0gbSAmJiBkaXN0W3gxXVt5MV0gPiBkaXN0W3hdW3ldICYmIGFbeDFdW3kxXSAhPSAnKicgJiYgIXZpc1t4MV1beTFdKSB7CiAgICAgICAgICAgICAgICB2aXNbeDFdW3kxXSA9IHRydWU7CiAgICAgICAgICAgICAgICBkaXN0W3gxXVt5MV0gPSBkaXN0W3hdW3ldICsgMSwgcS5wdXNoKG1wKHgxLCB5MSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCAtMTsKfQoKbWFpbigpewovLyAgaWNlYmVhciBoZWhlaGhlCiAgICBjaW4udGllKDApIC0+IHN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNvdXQudGllKDApOwogICAgaW50IHQgPSAxOwogICAgd2hpbGUodC0tKSBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0K