#include<iostream>
#include<queue>

using namespace std ;

struct ST
{
	int tx ,ty ;
	int kx ,ky ;
	int cnt ;
	ST( int a ,int s ,int d ,int f ,int g ) : tx( a ) ,ty( s ) ,kx( d ) ,ky( f ) ,cnt( g ){}
} ;

int mx[ 4 ] = { 1 ,0 ,0 ,-1 } ;
int my[ 4 ] = { 0 ,1 ,-1 ,0 } ;
int map[ 50 ][ 50 ] ;

int w ,h ;
int tx ,kx ;
int ty ,ky ;

void ans()
{
	queue< ST > que ;
	bool came[ 50 ][ 50 ][ 50 ][ 50 ] = { false } ;
	que.push( ST( tx - 1 ,ty - 1 ,kx - 1 ,ky - 1 ,0 ) ) ;
	came[ tx - 1 ][ ty - 1 ][ kx - 1 ][ ky - 1 ] = true ;
	while( ! que.empty() )
	{
		ST st = que.front() ;
		if( st.tx == st.kx && st.ty == st.ky )
		{
			cout << st.cnt << endl ;
			return ;
		}
		else if( st.cnt >= 100 )
		{
			break ;
		}
		que.pop() ;
		for( int i = 0 ; i < 4 ; i++ )
		{
			int j = 3 - i ;
			tx = st.tx + mx[ i ] ;
			kx = st.kx + mx[ j ] ;
			ty = st.ty + my[ i ] ;
			ky = st.ky + my[ j ] ;
			if( tx < 0 || tx >= w || ty < 0 || ty >= h || map[ ty ][ tx ] == 1 )
			{
				tx = st.tx ;
				ty = st.ty ;
			}
			if( kx < 0 || kx >= w || ky < 0 || ky >= h || map[ ky ][ kx ] == 1 )
			{
				kx = st.kx ;
				ky = st.ky ;
			}
			if( came[ tx ][ ty ][ kx ][ ky ] == false )
			{
				que.push( ST( tx ,ty ,kx ,ky ,st.cnt + 1 ) ) ;
				came[ tx ][ ty ][ kx ][ ky ] = true ;
			}
		}
	}
	cout << "NA" << endl ;
}

int main()
{
	while( cin >> w >> h ,h )
	{
		cin >> tx >> ty ;
		cin >> kx >> ky ;
		for( int i = 0 ; i < h ; i++ )
		{
			for( int j = 0 ; j < w ; j++ )
			{
				cin >> map[ i ][ j ] ;
			}
		}
		ans() ;
	}
}