### BUGGY CODE ###

import sys
input = sys.stdin.readline
from collections import deque

def main():
    h, w = map(int, input().split())
    ch,cw = map(int, input().split())
    dh, dw = map(int, input().split())
    ls = [input() for _ in range(h)]

    widou = []
    for i in range(-2,3):
        for j in range(-2, 3):
            widou.append((i, j))
    widou.remove((0,0))
    widou.remove((1,0))
    widou.remove((0,1))
    widou.remove((-1,0))
    widou.remove((0,-1))

    start = (ch-1, cw-1)
    goal = (dh-1, dw-1)

    explored = set()
    tempexplored = set()

    ytemp= deque()
    ytemp.append(start)

    wap = 0

    while ytemp:
        now = ytemp.popleft()

        if now == goal:
            print(wap)
            exit(0)

        x = now[0]
        y = now[1]

        explored.add((x, y))
        tempexplored.add((x, y))

        idou = [(1,0), (0,1), (0,-1), (-1,0)]
        for i, j in idou:
            a = x + i
            b = y + j
            if 0 <= a < h and 0 <= b < w:
                if ls[a][b] == '.':
                    if (a, b) not in explored:
                        ytemp.append((a,b))
                        explored.add((a,b))
                        tempexplored.add((a,b))

        if len(ytemp) ==0:
            wap += 1
            tempx = set()
            for s,t in tempexplored:
                for i, j in widou:
                    a = s + i
                    b = t + j
                    if 0 <= a < h and 0 <= b < w:
                        if ls[a][b] == '.':
                            if (a, b) not in explored:
                                ytemp.append((a, b))
                                explored.add((a, b))
                                tempx = set()
            tempexplored = tempx
    print('-1')
if __name__ == '__main__':
    main()


### FIXED CODE ###

from collections import deque

h, w = map(int, input().split())
ch,cw = map(int, input().split())
dh, dw = map(int, input().split())
ls = [input() for _ in range(h)]


widou = []

for i in range(-2,3):
    for j in range(-2, 3):
        widou.append((i, j))
widou.remove((0,0))
widou.remove((1,0))
widou.remove((0,1))
widou.remove((-1,0))
widou.remove((0,-1))
#print(widou)

start = (ch-1, cw-1)
goal = (dh-1, dw-1)

explored = set()
tempexplored = set()

yexp= deque()
yexp.append(start)
ytemp= deque()
ytemp.append(start)

wap = 0


while yexp:
    now = yexp.popleft()
    ytemp.popleft()

    if now == goal:
        print(wap)
        exit(0)

    x = now[0]
    y = now[1]

    explored.add((x, y))
    tempexplored.add((x, y))

    idou = [(1,0), (0,1), (0,-1), (-1,0)]
    for i, j in idou:
        a = x + i
        b = y + j
        if 0 <= a < h and 0 <= b < w:
            if ls[a][b] == '.':
                if (a, b) not in explored:
                    #print(a,b)
                    yexp.append((a,b))
                    ytemp.append((a,b))
                    explored.add((a,b))
                    tempexplored.add((a,b))
    #print(ytemp)
    #print(tempexplored)
    #print(explored)


    if len(ytemp) ==0:
        #print('waap')
        wap += 1
        for s,t in tempexplored:
            #print(s,t)
            for i, j in widou:
                #print(i,j)
                a = s + i
                b = t + j
                #print('kekka', a,b)


                if 0 <= a < h and 0 <= b < w:
                    #print(a, b)
                    if ls[a][b] == '.':
                        if (a, b) not in explored:
                            #print('OK')
                            yexp.append((a, b))
                            ytemp.append((a, b))
                            explored.add((a, b))
        tempexplored = set()
        #print(ytemp)
        #print(tempexplored)
        #print(explored)
print('-1')