import sys

from collections import deque

input = sys.stdin.readline





def main():

    h, w = list(map(int, input().split()))

    ch, cw = list(map(int, input().split()))

    dh, dw = list(map(int, input().split()))

    

    s = [input().replace("\n", "") for _ in range(h)]

    

    ans = [[-1]*w for _ in range(h)]

    ans[ch-1][cw-1] = 0

    not_yet = deque([(ch-1, cw-1)])

    one_time = deque([])

    while not_yet:

        x, y = not_yet.popleft()

        one_time.append((x, y))

        if x > 0 and ans[x-1][y] == -1 and s[x-1][y] == ".":

            not_yet.append((x-1, y))

            ans[x-1][y] = ans[x][y]

        if x < h-1 and ans[x+1][y] == -1 and s[x+1][y] == ".":

            not_yet.append((x+1, y))

            ans[x+1][y] = ans[x][y]

        if y > 0 and ans[x][y-1] == -1 and s[x][y-1] == ".":

            not_yet.append((x, y-1))

            ans[x][y-1] = ans[x][y]

        if y < w-1 and ans[x][y+1] == -1 and s[x][y+1] == ".":

            not_yet.append((x, y+1))

            ans[x][y+1] = ans[x][y]

        if not not_yet:

            while one_time:

                x2, y2 = one_time.popleft()

                for i in range(max(0, x2-2), min(h, x2+3)):

                    for j in range(max(0, y2-2), min(w, y2+3)):

                        if ans[i][j] == -1 and s[i][j] == ".":

                            ans[i][j] = ans[x][y]+1

                            not_yet.append((i, j))



    print((ans[dh-1][dw-1]))

            

            

            

        

    

    

    

    

if __name__ == "__main__":

    main()

import sys

from collections import deque

input = sys.stdin.readline





def main():

    h, w = list(map(int, input().split()))

    ch, cw = list(map(int, input().split()))

    dh, dw = list(map(int, input().split()))

    

    ch += 1

    cw += 1

    dh += 1

    dw += 1

    

    

    s = ["#"*(w+4)]

    s.append("#"*(w+4))

    for i in range(h):

        s.append("##" + input().replace("\n", "") + "##")

    s.append("#"*(w+4))

    s.append("#"*(w+4))

    

    

    ans = [[-1]*(w+4) for _ in range(h+4)]

    for i in range(h+4):

        for j in range(w+4):

            if s[i][j] == "#":

                ans[i][j] = -2

    ans[ch][cw] = 0

    

    move = [(-1, 0), (1, 0), (0, -1), (0, 1)]

    not_yet = deque([(ch, cw)])

    one_time = deque([])

    

    while len(not_yet) > 0:

        x, y = not_yet.popleft()

        one_time.append((x, y))

        for (p, q) in move:

            if ans[x+p][y+q] == -1:

                not_yet.append((x+p, y+q))

                ans[x+p][y+q] = ans[x][y]

                

        if len(not_yet) == 0:

            while len(one_time) > 0:

                x2, y2 = one_time.popleft()

                for i in range(x2-2, x2+3):

                    for j in range(y2-2, y2+3):

                        if ans[i][j] == -1:

                            ans[i][j] = ans[x2][y2]+1

                            not_yet.append((i, j))

                            

                      

    print((ans[dh][dw]))

    

    

    

if __name__ == "__main__":

    main()

import sys
from collections import deque

input = sys.stdin.readline


def main():
    h, w = list(map(int, input().split()))
    ch, cw = list(map(int, input().split()))
    dh, dw = list(map(int, input().split()))
    s = [input().replace("\n", "") for _ in range(h)]
    ans = [[-1] * w for _ in range(h)]
    ans[ch - 1][cw - 1] = 0
    not_yet = deque([(ch - 1, cw - 1)])
    one_time = deque([])
    while not_yet:
        x, y = not_yet.popleft()
        one_time.append((x, y))
        if x > 0 and ans[x - 1][y] == -1 and s[x - 1][y] == ".":
            not_yet.append((x - 1, y))
            ans[x - 1][y] = ans[x][y]
        if x < h - 1 and ans[x + 1][y] == -1 and s[x + 1][y] == ".":
            not_yet.append((x + 1, y))
            ans[x + 1][y] = ans[x][y]
        if y > 0 and ans[x][y - 1] == -1 and s[x][y - 1] == ".":
            not_yet.append((x, y - 1))
            ans[x][y - 1] = ans[x][y]
        if y < w - 1 and ans[x][y + 1] == -1 and s[x][y + 1] == ".":
            not_yet.append((x, y + 1))
            ans[x][y + 1] = ans[x][y]
        if not not_yet:
            while one_time:
                x2, y2 = one_time.popleft()
                for i in range(max(0, x2 - 2), min(h, x2 + 3)):
                    for j in range(max(0, y2 - 2), min(w, y2 + 3)):
                        if ans[i][j] == -1 and s[i][j] == ".":
                            ans[i][j] = ans[x][y] + 1
                            not_yet.append((i, j))
    print((ans[dh - 1][dw - 1]))


if __name__ == "__main__":
    main()

import sys
from collections import deque

input = sys.stdin.readline


def main():
    h, w = list(map(int, input().split()))
    ch, cw = list(map(int, input().split()))
    dh, dw = list(map(int, input().split()))
    ch += 1
    cw += 1
    dh += 1
    dw += 1
    s = ["#" * (w + 4)]
    s.append("#" * (w + 4))
    for i in range(h):
        s.append("##" + input().replace("\n", "") + "##")
    s.append("#" * (w + 4))
    s.append("#" * (w + 4))
    ans = [[-1] * (w + 4) for _ in range(h + 4)]
    for i in range(h + 4):
        for j in range(w + 4):
            if s[i][j] == "#":
                ans[i][j] = -2
    ans[ch][cw] = 0
    move = [(-1, 0), (1, 0), (0, -1), (0, 1)]
    not_yet = deque([(ch, cw)])
    one_time = deque([])
    while len(not_yet) > 0:
        x, y = not_yet.popleft()
        one_time.append((x, y))
        for (p, q) in move:
            if ans[x + p][y + q] == -1:
                not_yet.append((x + p, y + q))
                ans[x + p][y + q] = ans[x][y]
        if len(not_yet) == 0:
            while len(one_time) > 0:
                x2, y2 = one_time.popleft()
                for i in range(x2 - 2, x2 + 3):
                    for j in range(y2 - 2, y2 + 3):
                        if ans[i][j] == -1:
                            ans[i][j] = ans[x2][y2] + 1
                            not_yet.append((i, j))
    print((ans[dh][dw]))


if __name__ == "__main__":
    main()

-    s = [input().replace("\n", "") for _ in range(h)] -    ans = [[-1] * w for _ in range(h)] -    ans[ch - 1][cw - 1] = 0 -    not_yet = deque([(ch - 1, cw - 1)]) +    ch += 1 +    cw += 1 +    dh += 1 +    dw += 1 +    s = ["#" * (w + 4)] +    s.append("#" * (w + 4)) +    for i in range(h): +        s.append("##" + input().replace("\n", "") + "##") +    s.append("#" * (w + 4)) +    s.append("#" * (w + 4)) +    ans = [[-1] * (w + 4) for _ in range(h + 4)] +    for i in range(h + 4): +        for j in range(w + 4): +            if s[i][j] == "#": +                ans[i][j] = -2 +    ans[ch][cw] = 0 +    move = [(-1, 0), (1, 0), (0, -1), (0, 1)] +    not_yet = deque([(ch, cw)]) -    while not_yet: +    while len(not_yet) > 0: -        if x > 0 and ans[x - 1][y] == -1 and s[x - 1][y] == ".": -            not_yet.append((x - 1, y)) -            ans[x - 1][y] = ans[x][y] -        if x < h - 1 and ans[x + 1][y] == -1 and s[x + 1][y] == ".": -            not_yet.append((x + 1, y)) -            ans[x + 1][y] = ans[x][y] -        if y > 0 and ans[x][y - 1] == -1 and s[x][y - 1] == ".": -            not_yet.append((x, y - 1)) -            ans[x][y - 1] = ans[x][y] -        if y < w - 1 and ans[x][y + 1] == -1 and s[x][y + 1] == ".": -            not_yet.append((x, y + 1)) -            ans[x][y + 1] = ans[x][y] -        if not not_yet: -            while one_time: +        for (p, q) in move: +            if ans[x + p][y + q] == -1: +                not_yet.append((x + p, y + q)) +                ans[x + p][y + q] = ans[x][y] +        if len(not_yet) == 0: +            while len(one_time) > 0: -                for i in range(max(0, x2 - 2), min(h, x2 + 3)): -                    for j in range(max(0, y2 - 2), min(w, y2 + 3)): -                        if ans[i][j] == -1 and s[i][j] == ".": -                            ans[i][j] = ans[x][y] + 1 +                for i in range(x2 - 2, x2 + 3): +                    for j in range(y2 - 2, y2 + 3): +                        if ans[i][j] == -1: +                            ans[i][j] = ans[x2][y2] + 1 -    print((ans[dh - 1][dw - 1])) +    print((ans[dh][dw]))