from collections import deque
import copy
num_list = list(map(int, input().split()))
row=num_list[0]
col= num_list[1]
maze = [[0 for r in range(col)]for c in range(row)]
visited =[]
for i in range(row):
maze_list = input()
#maze_list = f.readline()
for j in range(col):
maze[i][j] = maze_list[j]
if maze[i][j] == 'B':
blue= [i,j]
if maze[i][j] == 'R':
red= [i,j]
if maze[i][j] == 'O':
hole = [i,j]
def print_maze(maze):
for i in maze:
print(i)
que = deque()
que.append([red,blue,0,maze])
# up,down,left,right
dx = [-1,1,0,0]
dy = [0,0,-1,1]
max_count = -1
while_breaker = False
visited.append(maze)
while len(que)>0:
tmp = que.popleft()
now_red = tmp[0]
now_blue = tmp[1]
count = tmp[2]
if max_count != -1:
break
if count >= 10:
break
for i in range(4):
tmp_maze = copy.deepcopy(tmp[3])
red_x, red_y = now_red
blue_x, blue_y = now_blue
next_red_x = red_x + dx[i]
next_red_y = red_y + dy[i]
next_blue_x = blue_x + dx[i]
next_blue_y = blue_y + dy[i]
start_red = [now_red[0],now_red[1]]
start_blue = [now_blue[0],now_blue[1]]
if 0 <= next_red_x < row and 0 <= next_red_y < col:
while tmp_maze[next_red_x][next_red_y] != '#' and tmp_maze[next_blue_x][next_blue_y] != '#': #먼저 동시에 굴려서 벽에 닿는 구슬이 있을때까지
if tmp_maze[next_red_x][next_red_y] == 'O': # 레드 구슬이 다음번에 구멍에 닿으면
tmp_maze[red_x][red_y] = '.' #우선 레드가 없다고 생각해보기
tmp_blue_x = next_blue_x
tmp_blue_y = next_blue_y
while tmp_maze[tmp_blue_x][tmp_blue_y] == '.': # 레드가 없을때 동시에 블루 구슬도 들어가는지 확인해보기
tmp_blue_x += dx[i]
tmp_blue_y += dy[i]
if tmp_maze[tmp_blue_x][tmp_blue_y] == 'O': #구멍에 들어간다면 동시 입력이 되서 종료
while_breaker = True
break
if count + 1 > max_count: #블루 구슬이 구멍에 들어가지 않는다면, 레드 구슬이 잘 들어간거임
max_count = count + 1
if tmp_maze[next_blue_x][next_blue_y] == 'O': #블루 구슬이 먼저 구멍에 들어간다면 종료
while_breaker = True
break
#visited[next_red_x][next_red_y] = 1
tmp_maze[red_x][red_y] = '.'
tmp_maze[blue_x][blue_y] = '.'
tmp_maze[next_red_x][next_red_y] = 'R'
tmp_maze[next_blue_x][next_blue_y] = 'B'
red_x = next_red_x
red_y = next_red_y
blue_x = next_blue_x
blue_y = next_blue_y
next_red_x = red_x + dx[i]
next_red_y = red_y + dy[i]
next_blue_x = blue_x + dx[i]
next_blue_y = blue_y + dy[i]
while while_breaker == False and(tmp_maze[next_red_x][next_red_y] == '.' or tmp_maze[next_red_x][next_red_y] == 'O'): #블루가 먼저 벽에 닿으면 레드를 나머지 굴려줌
if tmp_maze[next_red_x][next_red_y] == 'O': # 레드 구슬이 다음번에 구멍에 닿으면
tmp_maze[red_x][red_y] = '.' #우선 레드가 없다고 생각해보기
tmp_blue_x = next_blue_x
tmp_blue_y = next_blue_y
while tmp_maze[tmp_blue_x][tmp_blue_y] == '.': # 레드가 없을때 동시에 블루 구슬도 들어가는지 확인해보기
tmp_blue_x += dx[i]
tmp_blue_y += dy[i]
if tmp_maze[tmp_blue_x][tmp_blue_y] == 'O': # 구멍에 들어간다면 동시 입력이 되서 종료
while_breaker = True
break
if count + 1 > max_count: #블루 구슬이 구멍에 들어가지 않는다면, 레드 구슬이 잘 들어간거임
max_count = count + 1
tmp_maze[red_x][red_y] = '.'
tmp_maze[next_red_x][next_red_y] = 'R'
red_x = next_red_x
red_y = next_red_y
next_red_x = red_x + dx[i]
next_red_y = red_y + dy[i]
while while_breaker == False and (tmp_maze[next_blue_x][next_blue_y] == '.' or tmp_maze[next_blue_x][next_blue_y] == 'O'): # 레드가 먼저 벽에 닿으면 블루를 나머지 굴려줌
if tmp_maze[next_blue_x][next_blue_y] == 'O': #블루 구슬이 먼저 구멍에 들어간다면 종료
while_breaker = True
#max_count = -1
break
tmp_maze[blue_x][blue_y] = '.'
tmp_maze[next_blue_x][next_blue_y] = 'B'
blue_x = next_blue_x
blue_y = next_blue_y
next_blue_x = blue_x + dx[i]
next_blue_y = blue_y + dy[i]
if while_breaker == False and (tmp_maze[next_red_x][next_red_y] == '#' or tmp_maze[next_red_x][next_red_y]== 'B'):
if tmp_maze not in visited:
visited.append(tmp_maze)
que.append([[next_red_x-dx[i],next_red_y-dy[i]],[next_blue_x-dx[i],next_blue_y-dy[i]],count+1,tmp_maze])
print(max_count)
10 10
##########
#R#...##B#
#...#..###
######.#.#
#......#.#
#.######.#
#.#....#.#
#.######.#
#..O#.##.#
##########
answer : 10
10 10
##########
#R#...##B#
#...#..###
######.#.#
#......#.#
#.######.#
#.#....#.#
#.#O####.#
#...#.##.#
##########
answer : -1
움직이는 횟수가 10이 넘는 경우
5 5
##### ##O## #RB.# ##### #####
answer : 2
가는 방향에 B가 있더라도 움직이는 경우
6 7
#######
#R....#
#.....#
#..O..#
#..B..#
#######
answer : 3
B가 먼저 구멍에 들어가더라도 종료를 하면 안되는 경우
7 10
##########
#.......O#
###.#.#.##
#........#
#B#.###..#
#R...#...#
##########
answer : 6
R이 벽방향이더라도 B를 움직여봐야함