# https://atcoder.jp/contests/abc176/tasks/abc176_d

# h,w=1000,1000
# ch,cw=1,1
# dh,dw=1000,1000
# s=[]
# 500.times do
#   s << (".#"*500).chars
#   s << ("#."*500).chars
# end
h,w=gets.split.map(&:to_i)
ch,cw=gets.split.map(&:to_i)
dh,dw=gets.split.map(&:to_i)
s=[]
h.times do
  s << gets.chomp.chars
end
cij=0
h.times do |ii|
  w.times do |jj|
    if s[ii][jj]=="."
      q=[[ii,jj]]
      s[ii][jj]=cij
      while q!=[]
        z=[]
        q.each do |i,j|
          if i>0&&s[i-1][j]=="."
            s[i-1][j]=cij
            z << [i-1,j]
          end
          if j>0&&s[i][j-1]=="."
            s[i][j-1]=cij
            z << [i,j-1]
          end
          if i<h-1&&s[i+1][j]=="."
            s[i+1][j]=cij
            z << [i+1,j]
          end
          if j<w-1&&s[i][j+1]=="."
            s[i][j+1]=cij
            z << [i,j+1]
          end
        end
        q=z.dup
      end
      cij+=1
    end
  end
end
l=[]
cij.times do
  l << []
end
h.times do |ii|
  w.times do |jj|
    next if s[ii][jj]=="#"
    siijj=s[ii][jj]
    [0,ii-2].max.upto([h-1,ii+2].min) do |i|
      [0,jj-2].max.upto([w-1,jj+2].min) do |j|
        next if [[ii,jj],[ii-1,jj],[ii,jj-1],[ii+1,jj],[ii,jj+1]].include?([i,j])
        next if s[i][j]=="#"||siijj==s[i][j]||l[siijj].include?(s[i][j])
        l[siijj] << s[i][j]
        l[s[i][j]] << siijj
      end
    end
  end
end
start=s[ch-1][cw-1]
goal=s[dh-1][dw-1]
q=[start]
v=[0]*cij
v[start]=1
ans=0
while v[goal]==0
  if q==[]
    puts "-1"
    exit
  end
  ans+=1
  q.each do |qq|
    z=[]
    l[qq].each do |lqq|
      if v[lqq]==0
        v[lqq]=1
        z << lqq
      end
    end
    q=z.dup
  end
end

puts ans
