#include<bits/stdc++.h>
using namespace std;
int n,m;
bool chk(int i,int j){
if(i>=0 && i<n && j>=0 && j<m){return true;}
return false;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("input.in","r",stdin);
freopen("output.out","w",stdout);
#endif
int sx,sy;
cin>>m>>n;
char arr[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>arr[i][j];
if(arr[i][j]=='C'){sx=i;sy=j;}
}
}
int level[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
level[i][j]=INT_MAX;
}
}
queue<pair<int,pair<int,int> > > q;
q.push(make_pair(0,make_pair(sx,sy)));
level[sx][sy]=0;
while(!q.empty()){
pair<int,pair<int,int> > p = q.front();q.pop();
int x = p.second.first,y = p.second.second,d = p.first;
if(chk(x-1,y)){
if(arr[x-1][y]=='.' || arr[x-1][y]=='C'){
if(d==0 || d==1){
if(level[x-1][y] > level[x][y]){
level[x-1][y]=level[x][y];
q.push(make_pair(1,make_pair(x-1,y)));
}
}else if(d==2 || d==4){
if(level[x-1][y] > level[x][y]+1){
level[x-1][y]=level[x][y]+1;
q.push(make_pair(1,make_pair(x-1,y)));
}
}
}
}
if(chk(x+1,y)){
if(arr[x+1][y]=='.' || arr[x+1][y]=='C'){
if(d==0 || d==3){
if(level[x+1][y] > level[x][y]){
level[x+1][y]=level[x][y];
q.push(make_pair(3,make_pair(x+1,y)));
}
}else if(d==2 || d==4){
if(level[x+1][y] > level[x][y]+1){
level[x+1][y]=level[x][y]+1;
q.push(make_pair(3,make_pair(x+1,y)));
}
}
}
}
if(chk(x,y-1)){
if(arr[x][y-1]=='.' || arr[x][y-1]=='C'){
if(d==0 || d==4){
if(level[x][y-1] > level[x][y]){
level[x][y-1]=level[x][y];
q.push(make_pair(4,make_pair(x,y-1)));
}
}else if(d==1 || d==3){
if(level[x][y-1] > level[x][y]+1){
level[x][y-1]=level[x][y]+1;
q.push(make_pair(4,make_pair(x,y-1)));
}
}
}
}
if(chk(x,y+1)){
if(arr[x][y+1]=='.' || arr[x][y+1]=='C'){
if(d==0 || d==2){
if(level[x][y+1] > level[x][y]){
level[x][y+1]=level[x][y];
q.push(make_pair(2,make_pair(x,y+1)));
}
}else if(d==1 || d==3){
if(level[x][y+1] > level[x][y]+1){
level[x][y+1]=level[x][y]+1;
q.push(make_pair(2,make_pair(x,y+1)));
}
}
}
}
}
int ans=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(arr[i][j]=='C'){ans = max(ans,level[i][j]);}
}
}
cout<<ans<<endl;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBuLG07CmJvb2wgY2hrKGludCBpLGludCBqKXsKCWlmKGk+PTAgJiYgaTxuICYmIGo+PTAgJiYgajxtKXtyZXR1cm4gdHJ1ZTt9CglyZXR1cm4gZmFsc2U7Cn0KCmludCBtYWluKCl7CgkjaWZuZGVmIE9OTElORV9KVURHRQoJZnJlb3BlbigiaW5wdXQuaW4iLCJyIixzdGRpbik7CglmcmVvcGVuKCJvdXRwdXQub3V0IiwidyIsc3Rkb3V0KTsKCSNlbmRpZgoKCWludCBzeCxzeTsKCWNpbj4+bT4+bjsKCgljaGFyIGFycltuXVttXTsKCWZvcihpbnQgaT0wO2k8bjtpKyspewoJCWZvcihpbnQgaj0wO2o8bTtqKyspewoJCQljaW4+PmFycltpXVtqXTsKCQkJaWYoYXJyW2ldW2pdPT0nQycpe3N4PWk7c3k9ajt9CgkJfQoJfQoKCWludCBsZXZlbFtuXVttXTsKCWZvcihpbnQgaT0wO2k8bjtpKyspewoJCWZvcihpbnQgaj0wO2o8bTtqKyspewoJCQlsZXZlbFtpXVtqXT1JTlRfTUFYOwoJCX0KCX0KCglxdWV1ZTxwYWlyPGludCxwYWlyPGludCxpbnQ+ID4gPiBxOwoJcS5wdXNoKG1ha2VfcGFpcigwLG1ha2VfcGFpcihzeCxzeSkpKTsKCglsZXZlbFtzeF1bc3ldPTA7Cgl3aGlsZSghcS5lbXB0eSgpKXsKCQlwYWlyPGludCxwYWlyPGludCxpbnQ+ID4gcCA9IHEuZnJvbnQoKTtxLnBvcCgpOwoJCWludCB4ID0gcC5zZWNvbmQuZmlyc3QseSA9IHAuc2Vjb25kLnNlY29uZCxkID0gcC5maXJzdDsKCgkJaWYoY2hrKHgtMSx5KSl7CgkJCWlmKGFyclt4LTFdW3ldPT0nLicgfHwgYXJyW3gtMV1beV09PSdDJyl7CgkJCQlpZihkPT0wIHx8IGQ9PTEpewoJCQkJCWlmKGxldmVsW3gtMV1beV0gPiBsZXZlbFt4XVt5XSl7CgkJCQkJCWxldmVsW3gtMV1beV09bGV2ZWxbeF1beV07CgkJCQkJCXEucHVzaChtYWtlX3BhaXIoMSxtYWtlX3BhaXIoeC0xLHkpKSk7CgkJCQkJfQoJCQkJfWVsc2UgaWYoZD09MiB8fCBkPT00KXsKCQkJCQlpZihsZXZlbFt4LTFdW3ldID4gbGV2ZWxbeF1beV0rMSl7CgkJCQkJCWxldmVsW3gtMV1beV09bGV2ZWxbeF1beV0rMTsKCQkJCQkJcS5wdXNoKG1ha2VfcGFpcigxLG1ha2VfcGFpcih4LTEseSkpKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJaWYoY2hrKHgrMSx5KSl7CgkJCWlmKGFyclt4KzFdW3ldPT0nLicgfHwgYXJyW3grMV1beV09PSdDJyl7CgkJCQlpZihkPT0wIHx8IGQ9PTMpewoJCQkJCWlmKGxldmVsW3grMV1beV0gPiBsZXZlbFt4XVt5XSl7CgkJCQkJCWxldmVsW3grMV1beV09bGV2ZWxbeF1beV07CgkJCQkJCXEucHVzaChtYWtlX3BhaXIoMyxtYWtlX3BhaXIoeCsxLHkpKSk7CgkJCQkJfQoJCQkJfWVsc2UgaWYoZD09MiB8fCBkPT00KXsKCQkJCQlpZihsZXZlbFt4KzFdW3ldID4gbGV2ZWxbeF1beV0rMSl7CgkJCQkJCWxldmVsW3grMV1beV09bGV2ZWxbeF1beV0rMTsKCQkJCQkJcS5wdXNoKG1ha2VfcGFpcigzLG1ha2VfcGFpcih4KzEseSkpKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJaWYoY2hrKHgseS0xKSl7CgkJCWlmKGFyclt4XVt5LTFdPT0nLicgfHwgYXJyW3hdW3ktMV09PSdDJyl7CgkJCQlpZihkPT0wIHx8IGQ9PTQpewoJCQkJCWlmKGxldmVsW3hdW3ktMV0gPiBsZXZlbFt4XVt5XSl7CgkJCQkJCWxldmVsW3hdW3ktMV09bGV2ZWxbeF1beV07CgkJCQkJCXEucHVzaChtYWtlX3BhaXIoNCxtYWtlX3BhaXIoeCx5LTEpKSk7CgkJCQkJfQoJCQkJfWVsc2UgaWYoZD09MSB8fCBkPT0zKXsKCQkJCQlpZihsZXZlbFt4XVt5LTFdID4gbGV2ZWxbeF1beV0rMSl7CgkJCQkJCWxldmVsW3hdW3ktMV09bGV2ZWxbeF1beV0rMTsKCQkJCQkJcS5wdXNoKG1ha2VfcGFpcig0LG1ha2VfcGFpcih4LHktMSkpKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJaWYoY2hrKHgseSsxKSl7CgkJCWlmKGFyclt4XVt5KzFdPT0nLicgfHwgYXJyW3hdW3krMV09PSdDJyl7CgkJCQlpZihkPT0wIHx8IGQ9PTIpewoJCQkJCWlmKGxldmVsW3hdW3krMV0gPiBsZXZlbFt4XVt5XSl7CgkJCQkJCWxldmVsW3hdW3krMV09bGV2ZWxbeF1beV07CgkJCQkJCXEucHVzaChtYWtlX3BhaXIoMixtYWtlX3BhaXIoeCx5KzEpKSk7CgkJCQkJfQoJCQkJfWVsc2UgaWYoZD09MSB8fCBkPT0zKXsKCQkJCQlpZihsZXZlbFt4XVt5KzFdID4gbGV2ZWxbeF1beV0rMSl7CgkJCQkJCWxldmVsW3hdW3krMV09bGV2ZWxbeF1beV0rMTsKCQkJCQkJcS5wdXNoKG1ha2VfcGFpcigyLG1ha2VfcGFpcih4LHkrMSkpKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9CglpbnQgYW5zPTA7Cglmb3IoaW50IGk9MDtpPG47aSsrKXsKCQlmb3IoaW50IGo9MDtqPG07aisrKXsKCQkJaWYoYXJyW2ldW2pdPT0nQycpe2FucyA9IG1heChhbnMsbGV2ZWxbaV1bal0pO30KCQl9Cgl9Cgljb3V0PDxhbnM8PGVuZGw7Cn0=