#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> P;
typedef pair<P,int> PP;
int dx[4]={0,-1,0,1},dy[4]={1,0,-1,0};
bool check(int n,int m,int x,int y) {return x>=0&&x<n&&y>=0&&y<m;}
int N(char c) {
  if(c=='N') return 0;
  if(c=='W') return 1;
  if(c=='S') return 2;
  return 3;
}

int main() {
  int n,m;
  while(cin >> m >> n && n) {
    string s[n];
    vector<PP> v;
    for(int i=0; i<n; i++) {
      cin >> s[i];
      for(int j=0; j<m; j++) {
        if(isalpha(s[i][j])&&s[i][j]!='X') v.push_back(PP(P(i,j),N(s[i][j])));
      }
    }
    for(int t=0; t<=180; t++) {
      vector<P> d[n][m];
      int c=0;
      for(int i=0; i<v.size(); i++) {
        int nx=v[i].first.first,ny=v[i].first.second,k=v[i].second;
        if(s[nx][ny]=='X') continue;c++;
        for(int j=0; j<4; j++) {
          int kk=(k+j)%4;
          int x=nx+dx[kk],y=ny+dy[kk],f=0;
          if(!check(n,m,x,y)||s[x][y]=='#') continue;
          for(int l=0; l<v.size(); l++) {
            if(s[x][y]!='X'&&v[l].first==P(x,y)) f=1;
          }
          if(f) continue;
          d[x][y].push_back(P((kk+2)%4,i));
          v[i].second=(kk+3)%4;
          break;
        }
      }
      if(!c) {cout << t << endl;goto end;}
      for(int i=0;i<n;i++) {
        for(int j=0;j<m;j++) {
          if(!d[i][j].size()) continue;
          sort(d[i][j].begin(),d[i][j].end());
          P p=d[i][j][0];
          v[p.second]=PP(P(i,j),(p.first+1)%4);
        }
      }
    }
    cout << "NA" << endl;
  end:;
  }
  return 0;
}
