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

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

int foo(char c) {
	switch(c) {
		case 'N' : return 0;
		case 'W' : return 1;
		case 'S' : return 2;
		case 'E' : return 3;
	}
	return -1;
}

char bar(int d) {
	switch(d) {
		case 0 : return 'E';
		case 1 : return 'N';
		case 2 : return 'W';
		case 3 : return 'S';
	}
}

bool is_valid(int y, int x) {
	return 0 <= y && y < H && 0 <= x && x < W;
}

int main() {
	while(cin >> W >> H, W || H) {
		vector<string> m;
		for(int i = 0; i < H; i++) {
			string s;
			cin >> s;
			m.push_back(s);
		}

		int ret = 0;
		for(int t = 0; t < 180; t++) {
			vector<string> next;
			for(int i = 0; i < m.size(); i++) {
				string s = "";
				for(int j = 0; j < m[i].size(); j++) {
					if(foo(m[i][j]) != -1)
						s += ".";
					else
						s += m[i][j];
				}
				next.push_back(s);
			}

			for(int i = 0; i < m.size(); i++) {
				for(int j = 0; j < m[i].size(); j++) {
					if(foo(m[i][j]) != -1) {
						ret = t;
						bool flg = true;
						for(int k = 0; k < 4; k++) {
							int x, y;
							y = i+dy[(k+foo(m[i][j]))%4];
							x = j+dx[(k+foo(m[i][j]))%4];
							if(is_valid(y,x) && m[y][x] == 'X') {
								flg = false;
								break;
							}
							else if(is_valid(y,x) && m[y][x] == '.' && next[y][x] == '.') {
								next[y][x] = bar((k+foo(m[i][j])) % 4);
								flg = false;
								break;
							}
							//*
							else if(is_valid(y,x) && m[y][x] == '.' && next[y][x] != '.') {
								flg = false;
								next[i][j] = m[i][j];
								break;
							}
							// */
						}
						if(flg)
							next[i][j] = m[i][j];
					}
				}

			}

			m = next;

			/*
			for(int i = 0; i < m.size(); i++) {
				for(int j = 0; j < m[i].size(); j++) {
					cout << next[i][j];
				}
				cout << endl;
			}
			cout << endl;
			// */
		}

		for(int i = 0; i < m.size(); i++) {
			for(int j = 0; j < m[i].size(); j++) {
				if(foo(m[i][j]) != -1)
					ret = -1;
			}
		}

		if(ret == -1)
			cout << "NA" << endl;
		else
			cout << ret + 1 << endl;
	}
}

/*
 *
 * ICPC challenge club 2014 年忘年会
 * 金土日の方が都合がよい
 * SRMは外す
 * SRM 12/07 02:00~
 * SRM 12/12 01:00~
 * SRM 12/16 11:00~
 *
 * SRMは外す
 * 顧問の先生の参加はぜひ
 *
 * 予算3000円くらい
 *
 * 12/15以降がよい
 * 12月中
 *
 * 九州大学ICPCチャレンジ部部員募集中です
 */