require 'pp'
require 'set'

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 |i|
    t = gets.chomp!.chars
    s[i] = t
end

# grouping
added = Array.new(h)
h.times do |i|
    added[i] = Array.new(w, 0)
end
groups = []
g_num = 1
h.times do |i2|
    w.times do |j2|
        next if s[i2][j2] != "."
        
        #added[i2][j2] = g_num
        queue = []
        queue << [i2, j2, g_num]

        found = 0

        while queue.empty?.!
            i, j, num = queue.pop
            if added[i][j] == 0
                added[i][j] = num
                found = 1
                groups << [i, j, num]
            end
            if j > 0 && s[i][j-1] && s[i][j-1] == '.'
                if added[i][j-1] == 0
                    added[i][j-1] = num
                    groups << [i, j-1, num]
                    found = 1
                    queue << [i, j-1, num]
                end
            end
            if j < w - 1 && s[i][j+1] && s[i][j+1] == "."
                if added[i][j+1] == 0
                    added[i][j+1] = num
                    groups << [i, j+1, num]
                    found = 1
                    queue << [i, j+1, num]
                end
            end
            if i > 0 && s[i-1][j] && s[i-1][j] == "."
                if added[i-1][j] == 0
                    added[i-1][j] = num
                    groups << [i-1, j, num]
                    found = 1
                    queue << [i-1, j, num]
                end
            end
            if i < h - 1 && s[i+1][j] && s[i+1][j] == "."
                if added[i+1][j] == 0
                    added[i+1][j] = num
                    groups << [i+1, j, num]
                    found = 1
                    queue << [i+1, j, num]
                end
            end
        end

        if found == 1
            g_num += 1
        end
    end
end

#pp added
#pp groups

st = added[ch-1][cw-1]
ed = added[dh-1][dw-1]

#pp st
#pp ed

#routes = Array.new(g_num)
groups.combination(2) do |t1. t2|
    next if t1[2] == t2[2]
    
 #   routes[t1[2]] ||= []
end
=begin
#pp g2


#pp start
#pp ed
v = Array.new(g_num, 10**10)
q2 = []
q2 << [start, 0]

while q2.empty?.!
    t, d = q2.pop

    next if d >= v[t] 

    v[t] = d

    g2[t].each_with_index do |k, i|
        next if k == 0
        q2.push([i, d+1])
    end
end

if v[ed] == 10 ** 10
    puts "-1"
else
    puts v[ed]
end
=end
