### BUGGY CODE ###

H, W = map(int, input().split())
CH, CW = map(int, input().split())
DH, DW = map(int, input().split())
S = [list(input()) for i in range(H)]

# S = [["." if j % 2 == 0 else "#" for j in range(W)] for i in range(H)]
# S[0][0] = "."
# S[DH-1][DW-1] = "."

# for i in range(H):
#     print(S[i])

from collections import deque

q = deque([(CH-1, CW-1)])

directions = [(1, 0), (-1, 0), (0, 1), (0, -1)]
warp = [(-2, -2), (-2, -1), (-2, 0), (-2, 1), (-2, 2),
        (-1, -2), (-1, -1), (-1, 0), (-1, 1), (-1, 2),
        (0, -2), (0, -1), (0, 1), (0, 2),
        (1, -2), (1, -1), (1, 0), (1, 1), (1, 2),
        (2, -2), (2, -1), (2, 0), (2, 1), (2, 2)]
# warp = [(-2, -2), (-2, -1), (-2, 0), (-2, 1), (-2, 2),
#         (-1, -2), (-1, -1), (-1, 1), (-1, 2),
#         (0, -2), (0, 2),
#         (1, -2), (1, -1), (1, 1), (1, 2),
#         (2, -2), (2, -1), (2, 0), (2, 1), (2, 2)]

M = []
for i in range(H):
    M.append([10**9] * W)
M[CH-1][CW-1] = 0

# for i in range(H):
#     visited.append([False] * W)
# visited[CH-1][CW-1] = True

visited = deque([(CH-1, CW-1)])
while True:
    while q:
        h, w = q.popleft()
        for dh, dw in directions:
            if 0 <= h+dh < H and 0 <= w+dw < W and S[h+dh][w+dw] == ".":
                if M[h+dh][w+dw] > M[h][w]:
                    M[h+dh][w+dw] = M[h][w]
                    q.append((h+dh, w+dw))
                    visited.append((h+dh, w+dw))
                    # print(visited)

    while visited:
        vh, vw = visited.popleft()
        for wh, ww in warp:
            if 0 <= vh+wh < H and 0 <= vw+ww < W and S[vh+wh][vw+ww] == ".":
                if M[vh+wh][vw+ww] > M[vh][vw] + 1:
                    M[vh+wh][vw+ww] = M[vh][vw] + 1
                    q.append((vh+wh, vw+ww))
                    visited.append((vh+wh, vw+ww))
                    # print(visited)
    
    if len(q) == 0:
        break

# for i in range(H):
#     print(M[i])

if M[DH-1][DW-1] == 10**9:
    print(-1)
else:
    print(M[DH-1][DW-1])



### FIXED CODE ###

import sys
sys.setrecursionlimit(500000)

import sys
def input():
    return sys.stdin.readline()[:-1]

H, W = map(int, input().split())
CH, CW = map(int, input().split())
DH, DW = map(int, input().split())
S = [list(input()) for i in range(H)]
 
from collections import deque
 
q = deque([(CH-1, CW-1)])
 
directions = [(1, 0), (-1, 0), (0, 1), (0, -1)]
warp = [(-2, -2), (-2, -1), (-2, 0), (-2, 1), (-2, 2),
        (-1, -2), (-1, -1), (-1, 0), (-1, 1), (-1, 2),
        (0, -2), (0, -1), (0, 1), (0, 2), 
        (1, -2), (1, -1), (1, 0), (1, 1), (1, 2),
        (2, -2), (2, -1), (2, 0), (2, 1), (2, 2)]

for i in range(H):
    for j in range(W):
        if S[i][j] == ".":
            S[i][j] = 10**7
S[CH-1][CW-1] = 0

while q:
    h, w = q.popleft()
    for wh, ww in warp:
        if 0 <= h+wh < H and 0 <= w+ww < W and S[h+wh][w+ww] != "#":
            if (wh, ww) in directions:
                if S[h+wh][w+ww] > S[h][w]:
                    S[h+wh][w+ww] = S[h][w]
                    q.appendleft((h+wh, w+ww))
            else:
                if S[h+wh][w+ww] > S[h][w] + 1:
                    S[h+wh][w+ww] = S[h][w] + 1
                    q.append((h+wh, w+ww))

if S[DH-1][DW-1] == 10**7:
    print(-1)
else:
    print(S[DH-1][DW-1])