#include <bits/stdc++.h>
using namespace std;
int H,W,sx,sy,gx,gy,d[1000][1000];
string s[1000];
int main()
{
    cin>>H>>W;
    cin>>sx>>sy;
    cin>>gx>>gy;
    --sx;--sy;--gx;--gy;
    for(int i=0;i<H;++i)cin>>s[i];
    for(int i=0;i<H;++i)for(int j=0;j<W;++j)d[i][j]=H*W;
    d[sx][sy]=0;
    deque<pair<int,int>>q;
    q.push_back({sx,sy});
    while(!q.empty())
    {
        int x=q.front().first;
        int y=q.front().second;
        q.pop_front();
        for(int i=-2+x;i<=2+x;++i)for(int j=-2+y;j<=2+y;++j)
        {
            if(i<0||j<0||i>=H||j>=W||s[i][j]=='#')continue;
            if(abs(i-x)+abs(j-y)<=1&&d[i][j]>d[x][y])
            {
                d[i][j]=d[x][y];
                q.push_front({i,j});
            }else if(d[i][j]>d[x][y]+1)
            {
                d[i][j]=d[x][y]+1;
                q.push_back({i,j});
            }
        }
    }
    cout<<(d[gx][gy]==H*W?-1:d[gx][gy])<<endl;
}