h, w = gets.split.map(&:to_i)
ch, cw = gets.split.map(&:to_i)
ch -= 1
cw -= 1
dh, dw = gets.split.map(&:to_i)
dh -= 1
dw -= 1
s = Array.new(h)
h.times do |i|
  s[i] = gets.chop.chars
end

groups = []
group_id = Array.new(h) { Array.new(w) }
edges = []
h.times do |i|
  w.times do |j|
    next if s[i][j] == '#'

    edge = false
    edge = true if i != 0 && s[i-1][j] == '#'
    edge = true if i != h-1 && s[i+1][j] == '#'
    edge = true if j != 0 && s[i][j-1] == '#'
    edge = true if j != w-1 && s[i][j+1] == '#'
    edges << [i, j] if edge

    # 周囲をチェック
    if i != 0 && s[i-1][j] == '.'
      group_id[i][j] = group_id[i-1][j]
      groups[group_id[i][j]] << [i, j]
      next
    end

    if j != 0 && s[i][j-1] == '.'
      group_id[i][j] = group_id[i][j-1]
      groups[group_id[i][j]] << [i, j]
      next
    end

    groups << [[i, j]]
    group_id[i][j] = groups.length - 1
  end
end
if group_id[ch][cw] == group_id[dh][dw]
  puts 0
  exit 0
end

links = []
edges.each do |e|
  minh = e[0] - 2 < 0 ? 0 : e[0] - 2
  maxh = e[0] + 2 >= h ? h - 1 : e[0] + 2
  minw = e[1] - 2 < 0 ? 0 : e[1] - 2
  maxw = e[1] + 2 >= w ? w - 1 : e[1] + 2
  egid = group_id[e[0]][e[1]]
  (minh..maxh).each do |eh|
    (minw..maxw).each do |ew|
      next if s[eh][ew] == '#' || group_id[eh][ew] == egid
      links[egid] = [] if links[egid].nil?
      links[egid] << group_id[eh][ew]
    end
  end
end

links = links.map{_1&.uniq}
hop = 1
next_group_ids = links[group_id[ch][cw]]&.uniq || []
passed_group_ids = [group_id[ch][cw]]

until next_group_ids.empty?
  if next_group_ids.include?(group_id[dh][dw])
    puts hop
    exit 0
  end
  t = []
  next_group_ids.each do |nid|
    t << links[nid]
    passed_group_ids << nid
  end
  passed_group_ids.uniq!
  next_group_ids = t.flatten!.uniq - passed_group_ids
  hop += 1
end
puts '-1'
