function MainD(input){
    /** 配列の処理 */
    const arr = input.split('\n');
    const [H , W]  = arr[0].split(' ').map(Number);
    const [Ch, Cw] = arr[1].split(' ').map(Number);
    const [Dh, Dw] = arr[2].split(' ').map(Number);
    const Shw = [];
    for(let i=3; i<arr.length; i++){
        Shw.push(arr[i].split(''));
    }
    /** 本処理 */
    // ワープした回数は壁(#)を通った数
    /**
     * ゴールへたどる
     */
    const BFS = (curX, curY, count) => {
        // 現在地が壁ならワープ回数をプラスする
        if(Shw[curX][curY] === '#') {
            count++;
        }
        // ゴールにたどり着いたらワープした回数を返却
        if(curX === Dh-1 && curY === Dw-1) {
            return count;
        }
        /** 次のステップに値があればすすむ */
        let count1 = 10000;// 答えとしてありえない値
        if(curX+1 < H){
            count1 = BFS(curX+1, curY, count);
        }
        let count2 = 10000;// 答えとしてありえない値
        if(curY+1 < W){
            count2 = BFS(curX, curY+1, count);
        }

        // 最もワープ数が少ない値を返却
        return Math.min(count1, count2);
    }
    console.log(BFS(Ch-1, Cw-1, 0)); // 配列は0から始まる
}
MainD(require("fs").readFileSync("/dev/stdin", "utf8").trim());
