import java.util.*;
public class Main{
    static char[][] map = null;
    static int startX;
    static int startY;
    static int endX;
    static int endY;
    static int length;
    static int height;
    static int width;

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        height = input.nextInt();
        width = input.nextInt();
        map = new char[height + 2][width + 2];
        
        //为防止边界影响判断,加一圈边界障碍
        Arrays.fill(map[0], '*');
        Arrays.fill(map[height + 1], '*');
        for (int i = 1; i < height + 1; i++) {
            map[i][0] = '*';
            map[i][width + 1] = '*';
        }
        
        startX = input.nextInt();
        startY = input.nextInt();
        endX = input.nextInt();
        endY = input.nextInt();
        String line = input.nextLine();
        for (int i = 0; i < height; i++) {
            line = input.nextLine();
            for (int j = 0; j < width; j++) {
                map[i + 1][j + 1] = line.charAt(j);
            }
        }
        BFS();
        System.out.println(length);
    }


    public static void BFS() {
        ArrayList<MyPoint> vers = new ArrayList<>();
        ArrayList<MyPoint> newVers = new ArrayList<>();
        vers.add(new MyPoint(startX, startY));
        int x;
        int y;
        while (true) {
            for (int i = 0; i < vers.size(); i++) {
                x = vers.get(i).x;
                y = vers.get(i).y;
                //System.out.printf("点(%d,%d)找路\n", x, y);
                if (addVer(x + 1, y, newVers)) return;
                if (addVer(x - 1, y, newVers)) return;
                if (addVer(x, y + 1, newVers)) return;
                if (addVer(x, y - 1, newVers)) return;
            }
            if (newVers.size() == 0) {
                length = -1;
                return;
            }
            vers.clear();
            vers.addAll(newVers);
            newVers.clear();
            length++;
        }
    }

    public static boolean addVer(int x, int y, ArrayList<MyPoint> newVers) {
        if (map[x][y] == '.') {
            if (!isArrived(x, y)) {
                //System.out.printf("\t点(%d,%d)可以走\n", x, y);
                map[x][y] = '-';
                newVers.add(new MyPoint(x, y));
            } else {
                length++;
                return true;
            }
        }
        return false;
    }

    public static boolean isArrived(int x, int y) {
        return (x == endX) && (y == endY);
    }


}

class MyPoint {
    int x;
    int y;

    public MyPoint(int x, int y) {
        this.x = x;
        this.y = y;
    }
}