#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];
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, 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] != '*')
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+CiAgICBib29sIG1pbmltaXplKFQgJmEsIFQgYikgewogICAgaWYgKGEgPiBiKSB7YSA9IGI7IHJldHVybiB0cnVlO30KICAgIHJldHVybiBmYWxzZTsKfQoKY29uc3QgaW50IGluZiA9IElOVF9NQVg7CmNvbnN0IGxsIExMaW5mID0gTE9OR19MT05HX01BWDsKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7CmNvbnN0IGludCBOID0gMTAwICsgNTsKY29uc3QgaW50IGR4W10gPSB7MCwgMCwgMSwgLTF9OyAvLyAoeCswLCB4KzAsIHgrMSwgeC0xKQpjb25zdCBpbnQgZHlbXSA9IHsxLCAtMSwgMCwgMH07IC8vICh5KzEsIHktMSwgeSswLCB5KzApCgppbnQgZGlzdFtOXVtOXTsKY2hhciBhW05dW05dOwoKdm9pZCBzb2x2ZSgpewogICAgaW50IG4sIG07CiAgICBjaW4gPj4gbiA+PiBtOwogICAgcXVldWU8cGFpcjxpbnQsIGludD4+IHE7IC8vIGzGsHUgY8OhYyDDtCAoaSwgaikKICAgIG1lbXNldChkaXN0LCAweDNmLCBzaXplb2YgZGlzdCk7IC8vICtvbwogICAgRk9SKGksMSxuKQogICAgICAgIEZPUihqLDEsbSl7CiAgICAgICAgICAgIGNpbiA+PiBhW2ldW2pdOwogICAgICAgICAgICBpZiAoYVtpXVtqXSA9PSAnQycpIGRpc3RbaV1bal0gPSAwLCBxLnB1c2gobXAoaSwgaikpOwogICAgICAgIH0KICAgIHdoaWxlKCFxLmVtcHR5KCkpewogICAgICAgIGludCB4ID0gcS5mcm9udCgpLmZpOwogICAgICAgIGludCB5ID0gcS5mcm9udCgpLnNlOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgaWYgKGFbeF1beV0gPT0gJ0InKSBjb3V0IDw8IGRpc3RbeF1beV0sIGV4aXQoMCk7CiAgICAgICAgRk9SKGksMCwzKXsKICAgICAgICAgICAgaW50IHgxID0geCArIGR4W2ldOwogICAgICAgICAgICBpbnQgeTEgPSB5ICsgZHlbaV07CiAgICAgICAgICAgIGlmICh4MSA+IDAgJiYgeDEgPD0gbiAmJiB5MSA+IDAgJiYgeTEgPD0gbSAmJiBkaXN0W3gxXVt5MV0gPiBkaXN0W3hdW3ldICYmIGFbeDFdW3kxXSAhPSAnKicpCiAgICAgICAgICAgICAgICBkaXN0W3gxXVt5MV0gPSBkaXN0W3hdW3ldICsgMSwgcS5wdXNoKG1wKHgxLCB5MSkpOwogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgLTE7Cn0KCm1haW4oKXsKLy8gIGljZWJlYXIgaGVoZWhoZQogICAgY2luLnRpZSgwKSAtPiBzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjb3V0LnRpZSgwKTsKICAgIGludCB0ID0gMTsKICAgIHdoaWxlKHQtLSkgc29sdmUoKTsKICAgIHJldHVybiAwOwp9Cg==