/* 44 - 01*/

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

#define rep(i,n) for(int i=0;i<n;i++) 

int dx[] = { 0, 0,-1, 1};
int dy[] = { 1,-1, 0, 0};

class NODE{
public:
	int x1;
	int y1;
	int x2;
	int y2;
	int depth;
};

int main(){
	int X,Y,tx,ty,kx,ky;
	bool data[52][52];
	while(cin >> X >> Y , X){
		cin >> tx >> ty >> kx >> ky;
		rep(i,52)rep(j,52)data[i][j] = 1;
		rep(i,Y)rep(j,X){
			cin >> data[1+i][1+j];
		}
		queue<NODE> Q;
		NODE t = {tx,ty,kx,ky,0};
		Q.push(t);
		bool done[52][52][52][52] = {0};
		while(Q.size()){
			NODE q = Q.front();Q.pop();
			if(q.depth >= 100)continue;
			if( done[q.x1][q.y1][q.x2][q.y2] )continue;
			done[q.x1][q.y1][q.x2][q.y2] = true;
			
			if(q.x1 == q.x2 && q.y1 == q.y2){
				cout << q.depth << endl;
				goto end;
			}
			rep(i,4){
				NODE next;
				next.x1 = q.x1 + dx[i];
				next.y1 = q.y1 + dy[i];
				next.x2 = q.x2 - dx[i];
				next.y2 = q.y2 - dy[i];
				next.depth = q.depth + 1;
				if(data[next.y1][next.x1] == 1){
					next.x1 = q.x1;
					next.y1 = q.y1;
				}
				if(data[next.y2][next.x2] == 1){
					next.x2 = q.x2;
					next.y2 = q.y2;
				}
				Q.push(next);
			}
		}
		cout << "NA" << endl;
		end:;	
	}

}