#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void amin(T &a, const T &b) {
  if (b < a) a = b;
}
template <class T>
inline void amax(T &a, const T &b) {
  if (a < b) a = b;
}
struct Data {
  int sx, sy;
  int le, ri, to, bo;
  bool operator<(const Data &y) const { return sx < y.sx; }
};
int N, Q;
int main() {
  scanf("%d%d", &N, &Q);
  set<Data> S;
  S.insert((Data){1, 1, 1, N, 1, N});
  Data seek;
  for (int $ = 0, $_len = (Q); $ < $_len; ++$) {
    int col, row;
    char buf[8], dir;
    scanf("%d%d%s", &col, &row, buf);
    dir = buf[0];
    int ans = 0;
    seek.sx = col;
    set<Data>::iterator it = S.upper_bound(seek);
    if (it != S.begin()) {
      it--;
      if (it->sx <= col && col <= it->ri) {
        Data D = *it;
        S.erase(it);
        if (dir == 'U') {
          ans = row - D.to + 1;
          if (D.sx < col)
            S.insert((Data){D.sx, row + 1, D.le, col - 1, D.to, D.bo});
          if (col < D.ri)
            S.insert((Data){col + 1, D.sy, col + 1, D.ri, D.to, row - 1});
        } else {
          ans = col - D.le + 1;
          if (D.sy < row)
            S.insert((Data){col + 1, D.sy, D.le, D.ri, D.to, row - 1});
          if (row < D.bo)
            S.insert((Data){D.sx, row + 1, D.le, col - 1, row + 1, D.bo});
        }
      } else {
        ans = 0;
      }
    } else {
      ans = 0;
    }
    printf("%d\n", ans);
  }
  return 0;
}
