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

int W, H, N, M;
int a[30][30];
int b[30][30];
int d[900];
int pr[900];
int pc[900];
int xr[900];
int xc[900];
bool x[900];
bool y[900];

int dd[4] = {3, 0, 1, 2};
int dr[4] = {0, 1, 0, -1};
int dc[4] = {-1, 0, 1, 0};

void print_map() {
  for (int r = 0; r < H; ++r) {
    for (int c = 0; c < W; ++c) {
      char q = 0;
      if (a[r][c] == 0) {
        q = '.';
      } else if (a[r][c] == -1) {
        q = 'X';
      } else if (a[r][c] == -2) {
        q = '#';
      } else {
        int x = d[a[r][c]];
        if (!x) {
          q = 'W';
        } else if (x == 1) {
          q = 'S';
        } else if (x == 2) {
          q = 'E';
        } else if (x == 3) {
          q = 'N';
        }
      }
      cout << setw(3) << q;
    }
    cout << endl;
  }
  cout << endl;
}

bool input() {
  cin >> W >> H;
  if (!W && !H) {
    return false;
  }
  int id = 0;
  M = 0;
  for (int r = 0; r < H; ++r) {
    string str;
    cin >> str;
    for (int c = 0; c < W; ++c) {
      if (str[c] == '#') {
        a[r][c] = -2;
      } else if (str[c] == '.') {
        a[r][c] = 0;
      } else if (str[c] == 'X') {
        a[r][c] = -1;
        xr[M] = r;
        xc[M] = c;
        ++M;
      } else {
        a[r][c] = ++id;
        pr[id] = r;
        pc[id] = c;
        if (str[c] == 'W') {
          d[id] = 0;
        } else if (str[c] == 'S') {
          d[id] = 1;
        } else if (str[c] == 'E') {
          d[id] = 2;
        } else if (str[c] == 'N') {
          d[id] = 3;
        }
      }
    }
  }
  N = id;
  return true;
}

void solve() {
  if (!N) {
    cout << "0" << endl;
    return;
  }

  int t = 1;
  int u = 0;
  for (int id = 1; id <= N; ++id) {
    y[id] = false;
  }
  while (t <= 180) {
    for (int id = 1; id <= N; ++id) {
      if (y[id]) {
        continue;
      }
      int r = pr[id];
      int c = pc[id];
      for (int i = 0; i < 4; ++i) {
        int nd = (d[id] + dd[i]) % 4;
        int np = a[r + dr[nd]][c + dc[nd]];
        if (!np || np == -1) {
          d[id] = nd;
          break;
        }
      }
    }

    for (int r = 0; r < H; ++r) {
      for (int c = 0; c < W; ++c) {
        b[r][c] = 0;
      }
    }
    for (int id = 1; id <= N; ++id) {
      x[id] = false;
    }
    for (int i = 0; i < 4; ++i) {
      for (int id = 1; id <= N; ++id) {
        if (y[id]) {
          continue;
        }
        int r = pr[id];
        int c = pc[id];
        if (d[id] != i) {
          continue;
        }
        int np = a[r + dr[i]][c + dc[i]];
        if ((!np || np == -1) && !b[r + dr[i]][c + dc[i]]) {
          b[r + dr[i]][c + dc[i]] = id;
          x[id] = true;
        }
      }
    }

    for (int id = 1; id <= N; ++id) {
      if (y[id]) {
        continue;
      }
      int r = pr[id];
      int c = pc[id];
      if (!x[id]) {
        continue;
      }
      a[r][c] = 0;
      int nr = r + dr[d[id]];
      int nc = c + dc[d[id]];
      pr[id] = nr;
      pc[id] = nc;
      if (!a[nr][nc]) {
        a[nr][nc] = id;
      } else {
        y[id] = true;
        ++u;
      }
    }

    if (u == N) {
      break;
    }
    ++t;
  }
  if (t <= 180) {
    cout << t << endl;
  } else {
    cout << "NA" << endl;
  }
}

int main() {
  while (input()) {
    solve();
  }
  return 0;
}

Measured memory_bytes: 3180