#include <bits/stdc++.h>
using namespace std;
struct node {
  int l, r;
  int num;
} Treex[4000009], Treey[4000009];
map<int, int> vis;
int i;
int tot = 1;
int Tot = 1;
int x, y;
char str[5];
void update_y(int ll, int rr, int c, int l, int r, int t) {
  if (ll <= l && r <= rr)
    Treey[t].num = max(Treey[t].num, c);
  else {
    if (ll <= ((l + r) >> 1)) {
      if (!Treey[t].l) Treey[t].l = ++tot;
      update_y(ll, rr, c, l, ((l + r) >> 1), Treey[t].l);
    }
    if (rr > ((l + r) >> 1)) {
      if (!Treey[t].r) Treey[t].r = ++tot;
      update_y(ll, rr, c, ((l + r) >> 1) + 1, r, Treey[t].r);
    }
  }
}
void update_x(int ll, int rr, int c, int l, int r, int t) {
  if (ll <= l && r <= rr)
    Treex[t].num = max(Treex[t].num, c);
  else {
    if (ll <= ((l + r) >> 1)) {
      if (!Treex[t].l) Treex[t].l = ++Tot;
      update_x(ll, rr, c, l, ((l + r) >> 1), Treex[t].l);
    }
    if (rr > ((l + r) >> 1)) {
      if (!Treex[t].r) Treex[t].r = ++Tot;
      update_x(ll, rr, c, ((l + r) >> 1) + 1, r, Treex[t].r);
    }
  }
}
void query_x(int c, int l, int r, int rt) {
  i = max(i, Treex[rt].num);
  if (l == r) return;
  if (((l + r) >> 1) >= c)
    query_x(c, l, ((l + r) >> 1), Treex[rt].l);
  else
    query_x(c, ((l + r) >> 1) + 1, r, Treex[rt].r);
}
void query_y(int c, int l, int r, int rt) {
  i = max(i, Treey[rt].num);
  if (l == r) return;
  if (((l + r) >> 1) >= c)
    query_y(c, l, ((l + r) >> 1), Treey[rt].l);
  else
    query_y(c, ((l + r) >> 1) + 1, r, Treey[rt].r);
}
int main() {
  int n, q;
  scanf("%d%d", &n, &q);
  update_x(0, n, 0, 0, n, 1);
  update_y(0, n, 0, 0, n, 1);
  while (q--) {
    scanf("%d%d%s", &x, &y, str);
    if (vis[x]) {
      puts("0");
    } else {
      vis[x] = 1;
      i = 0;
      if (str[0] == 'U') {
        query_x(x, 0, n, 1);
        printf("%d\n", y - i);
        update_y(i, y, x, 0, n, 1);
      } else {
        query_y(y, 0, n, 1);
        printf("%d\n", x - i);
        update_x(i, x, y, 0, n, 1);
      }
    }
  }
  return 0;
}
