### BUGGY CODE ###

H,W = map(int,input().split())
Ch,Cw = map(int,input().split())
Dh,Dw = map(int,input().split())
grid = ""
for i in range(H):
    grid += input()
grid = list(grid)

def convert_1d_to_2d(l, cols):
    return [l[i:i + cols] for i in range(0, len(l), cols)]

grid = convert_1d_to_2d(grid, W)

ans = [[1000000]*W for i in range(H)]
ans[Ch-1][Cw-1]=0

from collections import deque

que = deque([[Ch-1,Cw-1]])
while que:
    x,y=que.popleft()
    for i,j in [(1,0),(0,1),(-1,0),(0,-1)]:
        nextx,nexty=x+i,y+j
        check = ans[x][y]
        
        if nextx>=0 and nexty>=0 and nextx<=H-1 and nexty<=W-1:
            dist=grid[nextx][nexty]
            if dist!='#':
                if check<ans[nextx][nexty]:
                    ans[nextx][nexty]=check
                    que.append([nextx,nexty])
                    
    for i,j in [(2,2),(2,1),(2,0),(2,-1),(2,-2),(1,2),(1,1),(1,-1),(1,-2),(0,2),(0,-2),(-2,2),(-2,1),(-2,0),(-2,-1),(-2,-2),(-1,2),(-1,1),(-1,-1),(-1,-2)]:
        nextx,nexty=x+i,y+j
        check = ans[x][y]+1
        
        if nextx>=0 and nexty>=0 and nextx<=H-1 and nexty<=W-1:
            dist=grid[nextx][nexty]
            if dist!='#':
                if check<ans[nextx][nexty]:
                    ans[nextx][nexty]=check
                    que.append([nextx,nexty])
                    
if ans[Dh-1][Dw-1]==1000000:
    print("-1")
else:
    print(ans[Dh-1][Dw-1])

### FIXED CODE ###

H,W = map(int,input().split())
Ch,Cw = map(int,input().split())
Dh,Dw = map(int,input().split())
grid = ""
for i in range(H):
    grid += input()
grid = list(grid)

def convert_1d_to_2d(l, cols):
    return [l[i:i + cols] for i in range(0, len(l), cols)]

grid = convert_1d_to_2d(grid, W)

ans = [[1000000]*W for i in range(H)]
ans[Ch-1][Cw-1]=0

from collections import deque
ans = [[1000000]*W for i in range(H)]
ans[Ch-1][Cw-1]=0

from collections import deque

que = deque([[Ch-1,Cw-1]])
que2 = deque([[Ch-1,Cw-1]])

while que or que2:
    if que:
        x,y=que.popleft()
        for i,j in [(1,0),(0,1),(-1,0),(0,-1)]:
            nextx,nexty=x+i,y+j
            check = ans[x][y]

            if nextx>=0 and nexty>=0 and nextx<=H-1 and nexty<=W-1:
                dist=grid[nextx][nexty]
                if dist!='#':
                    if check<ans[nextx][nexty]:
                        ans[nextx][nexty]=check
                        que.append([nextx,nexty])

        for i,j in [(2,2),(2,1),(2,0),(2,-1),(2,-2),(1,2),(1,1),(1,-1),(1,-2),(0,2),(0,-2),(-2,2),(-2,1),(-2,0),(-2,-1),(-2,-2),(-1,2),(-1,1),(-1,-1),(-1,-2)]:
            nextx,nexty=x+i,y+j
            check = ans[x][y]+1

            if nextx>=0 and nexty>=0 and nextx<=H-1 and nexty<=W-1:
                dist=grid[nextx][nexty]
                if dist!='#':
                    if check<ans[nextx][nexty]:
                        ans[nextx][nexty]=check
                        que2.append([nextx,nexty])
            
    else:
        x,y=que2.popleft()
        for i,j in [(1,0),(0,1),(-1,0),(0,-1)]:
            nextx,nexty=x+i,y+j
            check = ans[x][y]

            if nextx>=0 and nexty>=0 and nextx<=H-1 and nexty<=W-1:
                dist=grid[nextx][nexty]
                if dist!='#':
                    if check<ans[nextx][nexty]:
                        ans[nextx][nexty]=check
                        que.append([nextx,nexty])

        for i,j in [(2,2),(2,1),(2,0),(2,-1),(2,-2),(1,2),(1,1),(1,-1),(1,-2),(0,2),(0,-2),(-2,2),(-2,1),(-2,0),(-2,-1),(-2,-2),(-1,2),(-1,1),(-1,-1),(-1,-2)]:
            nextx,nexty=x+i,y+j
            check = ans[x][y]+1

            if nextx>=0 and nexty>=0 and nextx<=H-1 and nexty<=W-1:
                dist=grid[nextx][nexty]
                if dist!='#':
                    if check<ans[nextx][nexty]:
                        ans[nextx][nexty]=check
                        que2.append([nextx,nexty])
        
                    
if ans[Dh-1][Dw-1]==1000000:
    print("-1")
else:
    print(ans[Dh-1][Dw-1])