H, W = gets.split.map(&:to_i)
Ch, Cw = gets.split.map(&:to_i)
Dh, Dw = gets.split.map(&:to_i)
S = Array.new H + 2
S[0] = Array.new(W+2, "$")
H.times do |i|
    S[i+1] = ["$", *gets.chomp.split(''), "$"]
end
S[H+1] = Array.new(W+2, "$")

res = 0

fillq = [[Ch, Cw, 0]]
warpq = []

dlist = [
    [-1,0],
    [+1,0],
    [0,-1],
    [0,+1]
]
wdlist = [
    [-2,-2],
    [-2,-1],
    [-2,0],
    [-2,+1],
    [-2,+2],
    [-1,-2],
    [-1,-1],
    [-1,+1],
    [-1,+2],
    [0,-2],
    [0,+2],
    [+1,-2],
    [+1,-1],
    [+1,+1],
    [+1,+2],
    [+2,-2],
    [+2,-1],
    [+2,0],
    [+2,+1],
    [+2,+2]
]

while fillq[0] || warpq[0] do
    while(fq = fillq.shift) do
        h, w, d = *fq
        if h == Dh && w == Dw
            puts d
            exit
        end
        S[h][w] = d
        dlist.each do |dh, dw|
            _h = h + dh
            _w = w + dw
            t = S[_h][_w]
            if t == '.'
                fillq.push([_h,_w,d])
            end
        end
        warpq.push([h,w,d])
    end

    while wq = warpq.shift
        h,w,d = *wq
        wdlist.each do |dh,dw|
            _h = h + dh
            _w = w + dw
            next if _h < 1 || _w < 1 || _h > H || _w > W
            next unless S[_h][_w] == "."
            S[_h][_w] == ".."
            fillq.push([_h,_w,d+1])
        end
    end
end

puts -1