#include<bits/stdc++.h>
#define rep(i,n) for(int i=0;i<n;++i)
using namespace std;
using ll=long long;
constexpr ll mod=1000000007;
constexpr int inf=1000000000;
constexpr ll linf=1000000000000000000;

int main(){
    int h,w,ch,cw,dh,dw;
    cin>>h>>w>>ch>>cw>>dh>>dw;
    --ch;--cw;--dh;--dw;
    vector<string> s(h);
    rep(i,h)cin>>s[i];
    constexpr int dx[]={-1,1,0,0};
    constexpr int dy[]={0,0,-1,1};
    deque<pair<int,int>> q;
    int d[h][w];
    rep(i,h)rep(j,w)d[i][j]=-1;
    d[ch][cw]=0;
    q.push_back({ch,cw});
    while(q.size()){
        int x=q.front().first;
        int y=q.front().second;
        q.pop_front();
        rep(i,4){
            int nx=x+dx[i];
            int ny=y+dy[i];
            if(nx<0||h<=nx||ny<0||w<=ny||s[nx][ny]=='#')continue;
            if(d[nx][ny]==-1||d[x][y]<d[nx][ny]){
                d[nx][ny]=d[x][y];
                q.push_front({nx,ny});
            }
        }
        for(int i=-2;i<=2;++i){
            int nx=x+i;
            for(int j=-2;j<=2;++j){
                int ny=y+j;
                if(nx<0||h<=nx||ny<0||w<=ny||s[nx][ny]=='#'||d[nx][ny]!=-1)continue;
                d[nx][ny]=d[x][y]+1;
                q.push_back({nx,ny});
            }
        }
    }
    cout<<d[dh][dw]<<"\n";
}
