#include <iostream>
#include <stdio.h>

using namespace std;

void move( char stage[31][31], int y, int x, int dy, int dx ){
	if( stage[dy][dx] == 'X' ) stage[y][x] = '.';
	else if( stage[dy][dx] == '.' ){ stage[dy][dx] = stage[y][x] - 'A'; stage[y][x] = '.'; }
}
bool check( char stage[31][31], int y, int x ){
	return stage[y][x] == '.' || stage[y][x] == 'X';
}

void unitE( char stage[31][31], int y, int x )
{
	if( check(stage, y + 1, x ) ) stage[y][x] = 'S';
	else if( check(stage, y , x + 1 ) ) stage[y][x] = 'E';
	else if( check(stage, y - 1, x ) ) stage[y][x] = 'N';
	else if( check(stage, y, x - 1 ) ) stage[y][x] = 'W';
}
void unitW( char stage[31][31], int y, int x )
{
	if( check(stage, y - 1, x ) ) stage[y][x] = 'N';
	else if( check(stage, y , x - 1 ) ) stage[y][x] = 'W';
	else if( check(stage, y + 1, x ) ) stage[y][x] = 'S';
	else if( check(stage, y, x + 1 ) ) stage[y][x] = 'E';
}
void unitS( char stage[31][31], int y, int x )
{
	if( check(stage, y, x - 1 ) ) stage[y][x] = 'W';
	else if( check(stage, y + 1 , x ) ) stage[y][x] = 'S';
	else if( check(stage, y, x + 1) ) stage[y][x] = 'E';
	else if( check(stage, y - 1, x ) ) stage[y][x] = 'N';
}
void unitN( char stage[31][31], int y, int x )
{
	if( check(stage, y, x + 1 ) ) stage[y][x] = 'E';
	else if( check(stage, y - 1 , x ) ) stage[y][x] = 'N';
	else if( check(stage, y, x - 1) ) stage[y][x] = 'W';
	else if( check(stage, y + 1, x ) ) stage[y][x] = 'S';
}
int main(int argc, char const* argv[])
{
	char stage[31][31];
	int w,h,t;

	while( cin >> w >> h && w ){
		t = 180;
		for( int i = 0;i < 31;i++ ){
			for( int j = 0;j < 31;j++ ){
				stage[i][j] = 0;
			}
		}

		for( int i = 0;i < h;i++ ){
			cin >> stage[i];
		}

		for( t = 0;t < 180;t++ ){
			int count = 0;
			for( int i = 0;i < h;i++ ){
				for( int j = 0;j < w;j++ ){
					if( stage[i][j] == 'E' ){ unitE( stage, i, j ); count++;}
					else if( stage[i][j] == 'N' ){ unitN( stage, i, j ); count++;}
					else if( stage[i][j] == 'W' ){ unitW( stage, i, j ); count++;}
					else if( stage[i][j] == 'S' ){ unitS( stage, i, j ); count++;}
				}
			}
			if( count == 0 ){ cout << t << endl; break; }
			for( int i = 0;i < h;i++ ){
				for( int j = 0;j < w;j++ ){
					if( stage[i][j] == '.' || stage[i][j] == 'X' ){
						if( stage[i][j + 1] == 'W' ) move( stage, i, j+1, i, j );
						else if( stage[i - 1][j] == 'S' ) move( stage, i - 1,j , i, j );
						else if( stage[i][j - 1] == 'E' ) move( stage, i, j - 1,i , j );
						else if( stage[i + 1][j] == 'N' ) move( stage, i + 1,j, i, j );
					}
				}
			}
			for( int i = 0;i < h;i++ ){
				for( int j = 0;j < w;j++ ){
					int target = stage[i][j] + 'A';
					if( target == 'E' || target == 'W' || target == 'S' || target == 'N' ) stage[i][j] += 'A';
				}
			}
		}
		if( t == 180 ) cout << "NA" << endl;

	}
	return 0;
}