let magicCount=0
function main(arg) {
    
    let [h,w] = arg.split("\n")[0].split(" ").map(x=>Number(x))
    let [ch,cw] = arg.split("\n")[1].split(" ").map(x=>Number(x))
    let [dh,dw] = arg.split("\n")[2].split(" ").map(x=>Number(x))
    let input = arg.split("\n")
    
    input.shift()
    input.shift()
    input.shift()
    let s = []
    for(let i=0; i<h; i++) {
        let sw = []
        for(let j=0; j<w; j++) {
            sw.push(input[i].split("")[j])
            
        }
        s.push(sw)
    }
    
    // seen: 0 is for unsearched yet. -1 is no need for search.
    let seen = []
    for(let i=0; i<h; i++) {
        let _seen = []
        for(let j=0; j<w; j++) {
            if(s[i][j]==="."){
                _seen.push(false)
            } else {
                _seen.push(false)
            }
        }
        seen.push(_seen)
    }
    //console.log(seen)

    //let magicCount = 0
    //while(true) {
        dfs(s,ch-1,cw-1,seen,h,w,dh-1,dw-1)
        if(seen[dh-1][dw-1]===true) {
            console.log(magicCount)
        } else {
            console.log(-1)
            // magic will be used
            //dfs(s,ch-1,cw-1,seen,h,w,true)
            //magicCount++
        }
//break
    // }
    
    //console.log(seen)

}

function dfs(field,h,w,seen,H,W,dh,dw) {
    //return
    seen[h][w] = true;
    //console.log(seen)
//return 
    let dx = [1, 0, -1, 0]
    let dy = [0, 1, 0, -1]
    //dx = dx.map(x=>x*magic)
    //dy = dy.map(y=>y*magic)
// 四方向を探索
    for (let dir = 0; dir < 4; ++dir) {
        let nh = h + dx[dir];
        let nw = w + dy[dir];

        // 場外アウトしたり、移動先が壁の場合はスルー
        if (nh < 0 || nh >= H || nw < 0 || nw >= W) continue;
        if (field[nh][nw] == '#') continue;

        // 移動先が探索済みの場合
        if (seen[nh][nw]) continue;

        // 再帰的に探索
        dfs(field, nh, nw, seen, H, W,dh,dw);
    }
    
    for (let dir_x = -2; dir_x <= 2; dir_x+=2) {
        for (let dir_y = -2; dir_y <= 2; dir_y+=2) {
            let nh = h + dir_x;
            let nw = w + dir_y;
    
            // 場外アウトしたり、移動先が壁の場合はスルー
            if (nh < 0 || nh >= H || nw < 0 || nw >= W) continue;
            if (field[nh][nw] == '#') continue;
    
            // 移動先が探索済みの場合
            if (seen[nh][nw]) continue;
    
            // 再帰的に探索
            dfs(field, nh, nw, seen, H, W,dh,dw);
            magicCount++
        }
    }
    
//    console.log(magicCount)
}

main(require("fs").readFileSync("/dev/stdin", "utf8"));
