#include <bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int N, M;
cin >> N >> M;
vector<vector<int>> grid(N, vector<int>(M));
for(int i=0; i<N; i++){
string s;
cin >> s;
for(int j=0; j<M; j++){
if(s[j]=='.'){
grid[i][j]=0;
}
if(s[j]=='R'){
grid[i][j]=1;
}
if(s[j]=='F'){
grid[i][j]=2;
}
// cout << grid[i][j] << " ";
}
// cout << endl;
}
// rabbit is 1, fox is 2
int xadj[]={1, 0, -1, 0};
int yadj[]={0, 1, 0, -1};
vector<vector<int>> visited(N, vector<int>(M, -1));
priority_queue<pair<int, pair<int, int>>> q;
q.push({-1, {0, 0}});
visited[0][0]=1;
int maxdist=1;
while(!q.empty()){
// cout << q.top().first << " " << q.top().second.first << " " << q.top().second.second << endl;
int x=q.top().second.first;
int y=q.top().second.second;
q.pop();
for(int k=0; k<4; k++){
int newx=x+xadj[k];
int newy=y+yadj[k];
if((newx<0 || newx>=N || newy<0 || newy>=M)||visited[newx][newy]!=-1||grid[newx][newy]==0){
continue;
}
if (grid[x][y]==grid[newx][newy]) visited[newx][newy]=visited[x][y];
else visited[newx][newy]=visited[x][y]+1;
q.push({-visited[newx][newy], {newx, newy}});
maxdist=max(maxdist,visited[newx][newy]);
}
}
cout << maxdist << endl;
}