#include <bits/stdc++.h>
#define pii pair<int,int>
#define endl cout<<"\n";
#define fi first
#define int long long
#define se second
#define ios ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define op freopen
#define TXT "test"
#define freo if(fopen(TXT".inp","r")){op(TXT".inp","r",stdin);op(TXT".out","w",stdout);}

using namespace std;
int n,m;
bool a[1005][1005];
bool vs[1005][1005];
int u1,v1,u2,v2,d[1005][1005];
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
void bfs(pii i1,pii i2)
{
    queue<pii> q;
    vs[i1.fi][i1.se]=1;
    q.push(i1);
    pii c;
    int x,y,ox,oy;
    while(!q.empty())
    {
        c=q.front();
        q.pop();
        x=c.fi;
        y=c.se;
        for(int i=0;i<4;i++)
        {
            ox=dx[i]+x;
            oy=dy[i]+y;
            if(!vs[ox][oy]&&ox>=1&&ox<=n&&oy>=1&&oy<=m&& a[ox][oy]==0 )
            {
                vs[ox][oy]=1;
                q.push({ox,oy});
                d[ox][oy]=d[x][y]+1;
            }
        }
    }
}
main()
{
    ios;
    freo;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>a[i][j];
        }
    }
    cin>>u1>>v1>>u2>>v2;
    for(int i=0;i<=n;i++)
        vs[i][0]=1;
    for(int i=0;i<=m;i++)
        vs[0][i]=1;
    d[u1][v1]=1;
    bfs({u1,v1},{u2,v2});
    if(!vs[u2][v2])
    {
        cout<<-1;
    }
    else
    {
        cout<<d[u2][v2];
    }
}