#include<bits/stdc++.h>
using namespace std;
int n,m,bx,by,ex,ey,ans=INT_MAX;
char g[105][105];
int vis[105][105],gk[105][105];
int xx[]={0,1,-1,0,0};
int yy[]={0,0,0,1,-1};
void SetConsoleWindowSize(short x, short y) {
char cmd[64];
sprintf(cmd,"mode con cols=%d lines=%d",x,y);
system(cmd);
}
struct node{
int x,y,k,l;
bool operator<(const node& a)const{
return k<a.k;
}
};
void bfs(){
priority_queue<node> q;
q.push({bx,by,-1,-1});
vis[bx][by]=1;
gk[bx][by]=-1;
while(q.size()){node t=q.top();
int tx=t.x,ty=t.y,tk=-t.k,tl=t.l;
q.pop();
if(tx==ex&&ty==ey){
cout<<tk;
return;
}
for(int i=1;i<=4;i++){
int dl=tl,dk=gk[tx][ty],dx=tx+xx[i],dy=ty+yy[i];
if(dx<1||dy<1||dx>n||dy>m||g[dx][dy]=='*'||vis[dx][dy])continue;
vis[dx][dy]=1;
if(i!=tl){
dk++;
dl=i;
gk[dx][dy]=dk;
q.push({dx,dy,-dk,dl});
}else {
gk[dx][dy]=dk;
q.push({dx,dy,-dk,dl});
}
}
}
}
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>g[i][j];
if(g[i][j]=='C'){
if(bx==0||by==0)
bx=i,by=j;
else
ex=i,ey=j;
}
}
}
bfs();
}