h, w = gets.split.map(&:to_i)
c = gets.split.map(&:to_i)
d = gets.split.map(&:to_i)
s = Array.new(h) { gets.chomp.chars.map { _1 == '#' ? -1 : 0 } }
que = []
que << [c[0] - 1, c[1] - 1]
s[c[0] - 1][c[1] - 1] = 1
while que.size > 0
  y, x = que.pop
  cnt = s[y][x]
  if y + 1 < h && (s[y + 1][x] == 0 || s[y + 1][x] == cnt + 1)
    s[y + 1][x] = cnt
    que << [y + 1, x]
  end
  if y - 1 >=0 && (s[y - 1][x] == 0 || s[y - 1][x] == cnt + 1)
    s[y - 1][x] = cnt
    que << [y - 1, x]
  end
  if x + 1 < w && (s[y][x + 1] == 0 || s[y][x + 1] == cnt + 1)
    s[y][x + 1] = cnt
    que << [y, x + 1]
  end
  if x - 1 >= 0 && (s[y][x - 1] == 0 || s[y][x - 1] == cnt + 1)
    s[y][x - 1] = cnt
    que << [y, x - 1]
  end
  (y - 2).upto(y + 2) do |j|
    next if j < 0 || j >= h
    (x - 2).upto(x + 2) do |i|
      next if i < 0 || i >= w
      if s[j][i] == 0
        s[j][i] = cnt + 1
        que << [j, i]
      end
    end
  end
end
puts s[d[0] - 1][d[1] - 1] - 1