#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int main(){
    int n,m;
    cin>>n>>m;
    int x1,y1,x2,y2;
    cin>>x1>>y1>>x2>>y2;
    
    vector<vector<char>>arr(n+1,vector<char>(m+1)); 
    vector<vector<int>>step(n+1,vector<int>(m+1,-1)); 
    step[x1][y1]=0;
    
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>arr[i][j];
        }
    }
    queue<pair<int,int>>q;
    q.push({x1,y1});
    while(!q.empty()){
        auto it=q.front();
        q.pop();
        
        int i=it.first;
        int j=it.second;
        
        if(i==x2&&j==y2){
            cout<<step[i][j]<<endl;
            return 0;
        }
        int dirs[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
        for(auto &dir:dirs){
            int ni=i+dir[0];
            int nj=j+dir[1];
            if(ni>=1&&ni<=n&&nj>=1&&nj<=m&&step[ni][nj]==-1&& arr[ni][nj] == '.'){
                step[ni][nj]=step[i][j]+1;
                q.push({ni,nj});
            }
        }
    }
    cout<<-1<<endl;
    return 0;
}