#include <iostream>
#include <algorithm>
#include <vector>
#include <sstream>
#include <queue>
#include <cstring>
using namespace std;

struct NODE{
	int tx,ty,kx,ky,d;
	NODE(int tx,int ty,int kx,int ky,int d): tx(tx) , ty(ty) , kx(kx) , ky(ky) , d(d) {}
};

int c[53][53];
int memo[53][53][53][53]={0};

int main(){
	int W , H;
	while(cin >> W >> H && W){
		int tx,ty,kx,ky;
		cin >> tx >> ty >> kx >> ky;
		for(int i = 0 ; i < 53 ; i++)
			for(int j = 0 ; j < 53 ; j++)
				c[i][j] = 1;
		for(int i = 1 ; i <= H ; i++)
			for(int j = 1 ; j <= W ; j++)
				cin >> c[i][j];
		queue<NODE> Q;
		Q.push(NODE(tx,ty,kx,ky,0));
		memo[tx][ty][kx][ky] = 1;
		int dx[] = { -1 , 0 , 1 , 0 };
		int dy[] = { 0 , -1 , 0 , 1 };
		memset(memo,0,sizeof(memo));
		while(Q.size()){
			NODE q = Q.front(); Q.pop();
			if(q.d >= 100) break;
			
			if(q.kx == q.tx && q.ky == q.ty){
				cout << q.d << endl;
				goto exit;
			}
			for(int i = 0 ; i < 4 ; i++){
				NODE w = NODE(q.tx+dx[i],q.ty+dy[i],q.kx-dx[i],q.ky-dy[i],q.d+1);
				if(c[w.ty][w.tx]) w.ty = q.ty , w.tx = q.tx;
				if(c[w.ky][w.kx]) w.ky = q.ky , w.kx = q.kx;
				if(!memo[w.tx][w.ty][w.kx][w.ky]) Q.push(w) , memo[w.tx][w.ty][w.kx][w.ky] = true;
			}
		}
		cout << "NA" << endl;
		exit:;
	}
}