#include <bits/stdc++.h>
using namespace std;
struct po{int x,y,a,b;};
int w,h;
int mp[55][55];
int tx,ty,kx,ky;
int dis[55][55][55][55];

po mkp(int a,int b,int c,int d){
  po res;
  res.x=a, res.y=b, res.a=c,res.b=d;
  return res;
}

int bfs(){
  int dx[]={0,0,-1,1};
  int dy[]={1,-1,0,0};
  memset(dis,0,sizeof(dis));
  queue <po> Q;
  Q.push(mkp(tx,ty,kx,ky));

  while(!Q.empty()){
    po t=Q.front();Q.pop();

    if(dis[t.y][t.x][t.b][t.a]>=100) return -1;
    if(t.x==t.a&&t.y==t.b) return dis[t.y][t.x][t.b][t.a];
    

    for(int i=0;i<4;i++){
      int nx=t.x+dx[i],ny=t.y+dy[i];
      int na=t.a-dx[i],nb=t.b-dy[i];
      if(nx<0||ny<0||nx>=w||ny>=h||mp[ny][nx])nx=t.x,ny=t.y;
      if(na<0||nb<0||na>=w||nb>=h||mp[nb][na])na=t.a,nb=t.b;
      if(nx==t.x&&ny==t.y&&na==t.a&&nb==t.b)continue;
      if(dis[ny][nx][nb][na])continue;
      dis[ny][nx][nb][na]=dis[t.y][t.x][t.b][t.a]+1;
      Q.push(mkp(nx,ny,na,nb));
    }
  }
  return -1;
}

int main(){

  while(1){
  cin>>w>>h;
  if(!w&&!h)break;
  cin>>tx>>ty>>kx>>ky;
  tx--,ty--,kx--,ky--;
  for(int i=0;i<h;i++)
    for(int j=0;j<w;j++) cin>>mp[i][j];
  int res=bfs();
  if(res==-1) cout << "NA"<<endl;
  else cout <<res<<endl;
  }
  return 0;
}