#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
string karifie[1010];
string fie[1010];
int already[1010][1010];
int dy[4]={0,-1,0,1};
int dx[4]={-1,0,1,0};
int main(){
    for(int i=0;i<1010;i++){
        for(int j=0;j<1010;j++)already[i][j]=2100000000;
    }
    int H,W;
    int sy,sx,gy,gx;
    cin>>H>>W>>sy>>sx>>gy>>gx;
    for(int i=0;i<H;i++)cin>>karifie[i];
    fie[0]="############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################";
    fie[1]="############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################";
    for(int i=0;i<H;i++){
        fie[i+2]="##"+karifie[i]+"##";
    }
    fie[H+2]="############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################";
    fie[H+3]="############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################";

    already[sy+1][sx+1]=0;
    queue<int> Qy,Qx,Qte,kariQy,kariQx,kariQte;
    Qy.push(sy+1);
    Qx.push(sx+1);
    Qte.push(0);
    already[sy+1][sx+1]=0;
    while(1){
        if(Qy.size()){
            int nowy=Qy.front();Qy.pop();
            int nowx=Qx.front();Qx.pop();
            int nowte=Qte.front();Qte.pop();
            //printf("[[%d]][[%d]][[%d]]\n",nowy-1,nowx-1,nowte);
            for(int i=0;i<4;i++){
                if(fie[nowy+dy[i]][nowx+dx[i]]=='.'&&nowte<already[nowy+dy[i]][nowx+dx[i]]){
                    Qy.push(nowy+dy[i]);
                    Qx.push(nowx+dx[i]);
                    Qte.push(nowte);
                    already[nowy+dy[i]][nowx+dx[i]]=nowte;
                    //printf("i:[%d] [%d][%d][%d]\n",i,nowy+dy[i]-1,nowx+dx[i]-1,nowte);
                }
            }
            for(int i=-2;i<=2;i++){
                for(int j=-2;j<=2;j++){
                    if(fie[nowy+i][nowx+j]=='.'&&nowte+1<already[nowy+i][nowx+j]){
                        kariQy.push(nowy+i);
                        kariQx.push(nowx+j);
                        kariQte.push(nowte+1);
                        already[nowy+i][nowx+j]=nowte+1;
                    }
                }
            }
        }
        else if(kariQy.size()){
            int nowy=kariQy.front();kariQy.pop();
            int nowx=kariQx.front();kariQx.pop();
            int nowte=kariQte.front();kariQte.pop();
            for(int i=0;i<4;i++){
                if(fie[nowy+dy[i]][nowx+dx[i]]=='.'&&nowte<already[nowy+dy[i]][nowx+dx[i]]){
                    Qy.push(nowy+dy[i]);
                    Qx.push(nowx+dx[i]);
                    Qte.push(nowte);
                    already[nowy+dy[i]][nowx+dx[i]]=nowte;
                }
            }
            for(int i=-2;i<=2;i++){
                for(int j=-2;j<=2;j++){
                    if(fie[nowy+i][nowx+j]=='.'&&nowte+1<already[nowy+i][nowx+j]){
                        kariQy.push(nowy+i);
                        kariQx.push(nowx+j);
                        kariQte.push(nowte+1);
                        already[nowy+i][nowx+j]=nowte+1;
                    }
                }
            }
        }
        else{
            break;
        }
    }

    for(int i=2;i<6;i++){
        for(int j=2;j<6;j++){
            //cout<<already[i][j];
        }
        //puts("");
    }


    if(already[gy+1][gx+1]==2100000000)cout<<-1<<endl;
    else cout<<already[gy+1][gx+1]<<endl;
    return 0;
}


Measured memory_bytes: 9788