### BUGGY 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')

### 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')