#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define ull unsigned long long
#define ll long long
#define endl "\n"
#define emb emplace_back
#define io() do{ios::sync_with_stdio(false); cin.tie(nullptr);}while(0)
const ll mod=1e9+9;
const ll infl=1e18;
const int infi=1e9;
const int maxn= 1e6+2e5;
int main(){
io();
ll n,m;
cin >> n >> m;
vector<string> v(n);
for(auto &e:v)cin >> e;
queue<pair<int,int>> q[2];
bool fg=(v[0][0]=='F');
q[fg].emplace(0,0);
vector<vector<bool>> vis(n,vector<bool>(m,0));
vis[0][0]=1;
int cnt=0;
auto check=[&](int y,int x){return y>=0&&x>=0&&y<n&&x<m;};
pair<int,int> dir[]={{1,0},{0,1},{-1,0},{0,-1}};
string type="RF";
while(1){
if(q[fg].empty())break;
while(!q[fg].empty()){
auto [r,c]=q[fg].front();
q[fg].pop();
for(auto [my,mx]:dir){
int nr=my+r,nc=mx+c;
if(check(nr,nc)&&!vis[nr][nc]&&v[nr][nc]!='.'){
vis[nr][nc]=1;
if(v[nr][nc]==type[fg]){
q[fg].emplace(nr,nc);
}else q[!fg].emplace(nr,nc);
}
}
}
cnt++;
fg=!fg;
}
cout << cnt;
return 0;
}