#include<bits/stdc++.h>
using namespace std;
int n,m;
char a[110][110];
bool vis[110][110][5];
int sx,sy;
int waya[5]={0,0,1,-1};
int wayb[5]={1,-1,0,0};
struct go{
int x,y,zh,t;//zh是平面镜使用次数,t是方向
bool operator<(const go &a)const{
return a.zh<zh;
}
};
priority_queue<go>p;
int main() {
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j]=='C'&&!sx&&!sy)sx=i,sy=j;
}
}
p.push(go{sx,sy,0,10});
while(!p.empty()){
go t=p.top();
p.pop();
if(a[t.x][t.y]=='C'&&(t.y!=sy||t.x!=sx)){
cout<<t.zh-1;
return 0;
}
if(a[t.x][t.y]=='*'||t.x<1||t.y<1||t.x>n||t.y>m||vis[t.x][t.y][t.t])continue;
vis[t.x][t.y][t.t]=1;
for(int i=0;i<4;i++){
if(t.t%2){
if(i==t.t-1)continue;
}else{
if(i==t.t+1)continue;
}//防止180度转弯
int xx=waya[i]+t.x,yy=wayb[i]+t.y;
if(t.t!=i){
p.push(go{xx,yy,t.zh+1,i});
}else{
p.push(go{xx,yy,t.zh,t.t});
}
}
}
cout<<-1;
return 0;
}