### BUGGY CODE ###

import sys
sys.setrecursionlimit(10**6)
from collections import deque

icase=0
if icase==0:
    h,w=map(int,input().split())
    ch,cw=map(int,input().split())
    ch-=1
    cw-=1
    dh,dw=map(int,input().split())
    dh-=1
    dw-=1
    s=[[] for i in range(h)]
    for i in range(h):
        s[i]=input()
elif icase==1:
    h,w=4,4
    ch,cw=1,1
    dh,dw=4,4
    ch-=1
    cw-=1
    dh-=1
    dw-=1
    s=['..#.', '..#.', '.#..', '.#..']   
elif icase==2:
    h,w=4,4
    ch,cw=1,4
    dh,dw=4,1
    ch-=1
    cw-=1
    dh-=1
    dw-=1
    s=['.##.', '####', '####', '.##.']  
elif icase==3:
    h,w=4,5
    ch,cw=1,2
    dh,dw=2,5
    ch-=1
    cw-=1
    dh-=1
    dw-=1
    s=['#.###', '####.', '#..##', '#..##'] 
elif icase==4:
    h,w=4,4
    ch,cw=2,2
    dh,dw=3,3
    ch-=1
    cw-=1
    dh-=1
    dw-=1
    s=['....', '....', '....', '....']
        
icnt=-1
pair=[-1]*(h*w)
for i in range(h):
    for j in range(w):
        if s[i][j]==".":
            idx=i*w+j
#            pair.append(idx)
            pair[idx]=idx
#print("A",pair)
               
def root(x):
    if x==-1:
        return -1
    if x==pair[x]:
        return x
    else:
        tmp=root(pair[x])
        pair[x]=tmp
        return tmp

def unite(x,y):
    x=root(x)
    y=root(y)
    if x==y:
        return
    elif x>y:
        pair[x]=y
    else:
        pair[y]=x
        
for i in range(h):
    for j in range(w):
        idx=i*w+j
        if s[i][j]==".":
            if i<h-1 and s[i+1][j]==".":
                idx1=(i+1)*w+j
                pair[idx1]=idx
            if j<w-1 and s[i][j+1]==".":
                idx1=i*w+j+1
                pair[idx1]=idx

for i in range(h):
    for j in range(w):
        idx=i*w+j
        if s[i][j]==".":
            if i<h-1 and s[i+1][j]==".":
                idx1=(i+1)*w+j
                unite(idx,idx1)
            if i>0 and s[i-1][j]==".":
                idx1=(i-1)*w+j
                unite(idx,idx1)
            if j<w-1 and s[i][j+1]==".":
                idx1=i*w+j+1
                unite(idx,idx1)
            if j>0 and s[i][j-1]==".":
                idx1=i*w+j-1
                unite(idx,idx1)

#print("B:",pair)
l=[root(ii) for ii in range(len(pair))]
#print("l:",l)
ll=list(set(l))    
ll.sort()
ll=ll[1:]
if len(ll)<1:
    print(0)
    sys.exit()

gg=[[] for i in range(max(ll)+1)]
for i in range(h):
    for j in range(w):
        idx=i*w+j
        if root(idx)!=-1:
            gg[root(idx)].append((i,j))        

ggg=[[] for i in range(max(ll)+1)]
for gi in gg:
    for gi2 in gg:
        if gi==gi2:
            continue
        yn=""
        for i,j in gi:
            idx=i*w+j
            for i2,j2 in gi2:
                idx2=i2*w+j2
                if root(idx2) in ggg[root(idx)]:
                    continue
                if abs(i-i2)<=2 and abs(j-j2)<=2:
                    ggg[root(idx)].append(root(idx2))
                    ggg[root(idx2)].append(root(idx))
                    yn="yes"
                    break
            if yn=="yes":
                break
            
#print("ll:",ll)
lenpair=len(ll)    
lenpair=max(ll)+1

qst=root(ch*w+cw)
qed=root(dh*w+dw)
q=deque([qst])

stack=[qst]
parent=[-1]*lenpair
parent[qst]=0
dist=[-1]*lenpair
dist[qst]=0
while q:
    state = q.popleft()
#    print("--- q:",q,"state:",state,"g:",g[state],"p:",parent)
    for v in ggg[state]:
#        print("  state:",state,"v:",v,"q:",q)
#        if parent[state] == v:
        if parent[v] !=-1:
            continue
        else:
#            print("parent:",parent,"xx:",xx,"stack",stack)
            parent[v]=state
            dist[v]=dist[state]+1
            q.append(v)
            if v==qed:
                print(dist[qed])   
                sys.exit()
#            print(" state:",state,"v:",v,"parent:",parent,"stack",stack,"dist[v]",dist[v])
print(-1)   

    

### FIXED CODE ###


import sys
from collections import deque
import itertools

def input(): return sys.stdin.readline().strip()

icase=0
if icase==0:
    h,w=map(int,input().split())
    ch,cw=map(int,input().split())
    ch-=1
    cw-=1
    dh,dw=map(int,input().split())
    dh-=1
    dw-=1
    s=[[] for i in range(h)]
    for i in range(h):
        s[i]=input()
        
ij=[(1,0),(-1,0),(0,1),(0,-1)]
wpij=[(1,1),(-1,-1),(-1,1),(1,-1),
      (2,-2),(2,-1),(2,0),(2,1),(2,2),
      (-2,-2),(-2,-1),(-2,0),(-2,1),(-2,2),
      (1,2),(0,2),(-1,2),(1,-2),(0,-2),(-1,-2)]

hh=[i for i in range(h)]
ww=[i for i in range(w)]

g=[[[] for i in range(w)] for i in range(h)]
gg=[[[] for i in range(w)] for i in range(h)]
wpg2=[[0]*w for i in range(h)]
wpg=[]

hhww=[(i,j) for i,j in itertools.product(hh,ww) if s[i][j]=="."]
                
for i,j in hhww:
    g[i][j]=[(i+ii,j+jj) for ii,jj in ij if (0<=(i+ii)<h and 0<=(j+jj)<w and s[i+ii][j+jj]==".")] 
    if i+1<h and s[i+1][j]=="#": wpg2[i][j]=1
    elif 0<=i-1 and s[i-1][j]=="#": wpg2[i][j]=1
    elif j+1<w and s[i][j+1]=="#": wpg2[i][j]=1
    elif 0<=j-1 and s[i][j-1]=="#": wpg2[i][j]=1

for i,j in hhww:
    if wpg2[i][j]>=1:
        wpg.append((i,j))
                
for i,j in wpg:
    for ii,jj in wpij:
         if 0<=i+ii and i+ii<h and 0<=j+jj \
            and j+jj<w and s[i+ii][j+jj]==".":
                gg[i][j].append((i+ii,j+jj))        

q=deque([(ch,cw)])
qq=deque()
parent=[[-1]*w for i in range(h)]
parent[ch][cw]=0
dist=[[-1]*w for i in range(h)]
dist[ch][cw]=0
while True:
    while q:
#        print("q1:",q)
        hi,wi = q.popleft()
        if len(gg[hi][wi])>0:
            qq.append((hi,wi))
        for hj,wj in g[hi][wi]:
            if parent[hj][wj] !=-1:
                continue
            else:
                parent[hj][wj]=(hi,wi)
                dist[hj][wj]=dist[hi][wi]+1
                q.append((hj,wj))
                if hj==dh and wj==dw:
                    print(dist[dh][dw]//(10**7))   
                    sys.exit()

    while qq:
        hi,wi = qq.popleft()
        for hj,wj in gg[hi][wi]:
            if parent[hj][wj]!=-1:
                continue
            parent[hj][wj]=(hi,wi)
            dist[hj][wj]=dist[hi][wi]+10**7
            q.append((hj,wj))
            if hj==dh and wj==dw:
                print(dist[dh][dw]//(10**7))   
                sys.exit()

    if len(q)==0:
        break
print(-1)