#include<bits/stdc++.h>
#define PI 3.141592653589793238462
using namespace std;
typedef long long ll;
typedef long double db;
typedef pair<pair<int,int>,int> ppp;
char c[1005][1005];
int n,m,sx,sy,nx,ny,dx[4]={0,0,1,-1},dy[4]={1,-1,0,0},dis[1005][1005];
void bfs(){
    priority_queue<ppp> q;
    q.push({{0,sx},sy});dis[sx][sy]=0;
    while(!q.empty()){
        int v=-q.top().first.first,x=q.top().first.second,y=q.top().second;q.pop();
        if(x==nx&&y==ny) {cout<<v<<endl;exit(0);}
        for(int i=0;i<4;i++){
            int px=x+dx[i],py=y+dy[i];
            if(px>n||px<1||py>m||py<1||c[px][py]=='#'||dis[px][py]<=v) continue;
            q.push({{-v,px},py});dis[px][py]=v;
        }
        for(int i=x-2;i<=x+2;i++){
            for(int j=y-2;j<=y+2;j++){
                if(i>n||i<1||j>m||j<1||c[i][j]=='#'||dis[i][j]<=v+1) continue;
                q.push({{-v-1,i},j});dis[i][j]=v+1;
            }
        }
    }
}
int main(){
    cin>>n>>m>>sx>>sy>>nx>>ny;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>c[i][j];
        }
    }
    memset(dis,0x3f,sizeof(dis));
    bfs();cout<<-1<<endl;
} 