dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
n, m = map(int, input().split())
board = [list(input()) for _ in range(n)]
ans = 11
flag = 0
for i in range(n):
for j in range(m):
if board[i][j] == 'o':
if flag == 0:
cx1, cy1 = i, j
flag = 1
else:
cx2, cy2 = i, j
board[i][j] = '.'
def press(cx1, cy1, cx2, cy2, cnt):
global ans
if cnt >= 10:
return
for dir in range(4):
ncx1, ncy1 = cx1 + dx[dir], cy1 + dy[dir]
ncx2, ncy2 = cx2 + dx[dir], cy2 + dy[dir]
# 두 개 같이 떨어지면
if (ncx1 < 0 or ncx1 >= n or ncy1 < 0 or ncy1 >= m) and (ncx2 < 0 or ncx2 >= n or ncy2 < 0 or ncy2 >= m):
continue
# 하나만 떨어지면
elif (ncx1 < 0 or ncx1 >= n or ncy1 < 0 or ncy1 >= m) or (ncx2 < 0 or ncx2 >= n or ncy2 < 0 or ncy2 >= m):
ans = min(ans, cnt+1)
return
# 둘 다 안 떨어지면
else:
# 이동하려는 칸이 벽이면 그대로 있음
if board[ncx1][ncy1] == '#':
ncx1, ncy1 = cx1, cy1
if board[ncx2][ncy2] == '#':
ncx2, ncy2 = cx2, cy2
press(ncx1, ncy1, ncx2, ncy2, cnt + 1)
press(cx1, cy1, cx2, cy2, 0)
if ans == 11:
print(-1)
else:
print(ans)