#include <iostream>
#include<cstring>
#include <vector>
#include <queue>
using namespace std;
const int N=1e3+10;
int a[N][N];
char c[N][N];
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
int n,m;
int x1,y1,x2,y2;
void bfs()
{
    memset(a,-1,sizeof(a));
    queue<pair<int,int>> q;
    q.push({x1,y1});
    a[x1][y1]=0;
    while(q.size()>0)
    {
        auto v=q.front();
        q.pop();
        for(int i=0;i<4;i++)
        {
            if(v.first+dx[i]>=1&&v.first+dx[i]<=n&&v.second+dy[i]>=1&&v.second+dy[i]<=m&&a[v.first+dx[i]][v.second+dy[i]]==-1&&c[v.first+dx[i]][v.second+dy[i]]!='*')
            {
                q.push({v.first+dx[i],v.second+dy[i]});
                a[v.first+dx[i]][v.second+dy[i]]=a[v.first][v.second]+1;
            }
        }
    }
}
int main() {
     cin>>n>>m;
     cin>>x1>>y1>>x2>>y2;
     for(int i=1;i<=n;i++)
     {
        for(int j=1;j<=m;j++)
        {
            cin>>c[i][j];
        }
     }
     bfs();
     cout<<a[x2][y2];
     return 0;
}
// 64 位输出请用 printf("%lld")