#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
****************************************************************/