#include<bits/stdc++.h>
#define N 30
using namespace std;
int dy[4]={0,-1,0,1};
int dx[4]={1,0,-1,0};
int w,h,ans,cnt,sum;
bool used[N][N];
string s[N];


void Change_dir(){
  for(int i=0;i<h;i++){
    for(int j=0;j<w;j++){
      if(!('0'<=s[i][j]&&s[i][j]<='3'))continue;
      int dir=s[i][j]-'0';
      for(int k=3;k<=6;k++){
	int ndir=(dir+k)%4;
	int ny=i+dy[ndir],nx=j+dx[ndir];
	if(ny<0||nx<0||h<=ny||w<=nx)continue;
	if(s[ny][nx]=='.'||s[ny][nx]=='X'){
	  s[i][j]=ndir+'0';
	  break;
	}
      }
    }
  }
}

void Change_pls(){
  for(int i=0;i<h;i++){
    for(int j=0;j<w;j++){
      if(!(s[i][j]=='.'||s[i][j]=='X'))continue;
      if(used[i][j])continue;
      for(int k=0;k<4;k++){
	int ny=i+dy[k],nx=j+dx[k];
	if(ny<0||nx<0||h<=ny||w<=nx)continue;
	if(used[ny][nx])continue;
	if('0'<=s[ny][nx]&&s[ny][nx]<='3'){
	  if(s[ny][nx]!=(k+2)%4+'0')continue;
	  used[i][j]=used[ny][nx]=true;
	  if(s[i][j]=='.')s[i][j]=s[ny][nx];
	  else cnt++;
	  s[ny][nx]='.';
	  break;
	}
      }
    }
  }
}

int main(){
  while(1){
    cin>>w>>h;
    if(!w&&!h)break;
    ans=cnt=sum=0;
    for(int i=0;i<h;i++)cin>>s[i];
    for(int i=0;i<h;i++)
      for(int j=0;j<w;j++){
	if(s[i][j]=='E')s[i][j]='0',sum++;
	if(s[i][j]=='N')s[i][j]='1',sum++;
	if(s[i][j]=='W')s[i][j]='2',sum++;
	if(s[i][j]=='S')s[i][j]='3',sum++;
      }
    while(1){
      ans++;
      if(ans>180)break;
      Change_dir();
      memset(used,0,sizeof(used));
      Change_pls();
      if(cnt==sum)break;
    }
    if(ans>180)cout<<"NA"<<endl;
    else cout<<ans<<endl;
  }
  return 0;
}