#include <bits/stdc++.h>
using namespace std;
//a数组:代表迷宫
//b数组:描述路径,默认0,走一步+1
int n,m;
char a[110][110];
int b[110][110];
int main() {
cin>>n>>m;
for(int i = 0;i < n;i++){
for(int j = 0;j < m;j++){
cin>>a[i][j];
//标记起始点
if(a[i][j] == 'L') b[i][j] = 1;
}
}
string s = "LQBS";//行走顺序
int c = 1;
//从一点出发,在上下左右寻找目标点,找到就继续
//找不到结束,死循环也结束
while(true){
int flag = 0;//标记是否找到
for(int i = 0;i < n;i++){
for(int j = 0;j < m;j++){
//从起点位置出发
if(b[i][j] == c){
//四方向找一个目标
if(a[i][j-1]==s[c%4]){
b[i][j-1] = c + 1;
flag++;
}
if(a[i][j+1]==s[c%4]){
b[i][j+1] = c + 1;
flag++;
}
if(a[i-1][j]==s[c%4]){
b[i-1][j] = c + 1;
flag++;
}
if(a[i+1][j]==s[c%4]){
b[i+1][j] = c + 1;
flag++;
}
}
}
}
if(flag == 0) break;//上下左右都无法走
if(c > n * m) break;//无限循环
c++;
}
if(c > n * m) cout<<-1;
else cout<<c / 4;
return 0;
}
/**************************************************************
Problem: 1950
User: admin
Language: C++
Result: Accepted
Time:17 ms
Memory:2132 kb
****************************************************************/