#include <bits/stdc++.h>
using namespace std;
struct Segment_Tree {
  struct tree {
    int l, r, tag, v;
  } t[200005 << 3];
  void Down_date(int k) {
    if (t[k].tag == 0) return;
    if (t[k].l != t[k].r) {
      t[(k << 1)].tag = max(t[(k << 1)].tag, t[k].tag);
      t[(k << 1 | 1)].tag = max(t[(k << 1 | 1)].tag, t[k].tag);
      t[(k << 1)].v = max(t[(k << 1)].v, t[k].tag);
      t[(k << 1 | 1)].v = max(t[(k << 1 | 1)].v, t[k].tag);
    }
    t[k].tag = 0;
  }
  void Up_date(int k) {
    if (t[k].l == t[k].r) return;
    Down_date((k << 1));
    Down_date((k << 1 | 1));
    t[k].v = max(t[(k << 1)].v, t[(k << 1 | 1)].v);
  }
  void Build(int k, int l, int r) {
    t[k].l = l, t[k].r = r, t[k].tag = 0;
    if (l == r) {
      t[k].v = 0;
      return;
    }
    int mid = (l + r) >> 1;
    Build((k << 1), l, mid);
    Build((k << 1 | 1), mid + 1, r);
    Up_date(k);
  }
  void Change(int k, int a, int b, int c) {
    int l = t[k].l, r = t[k].r;
    if (a > r || b < l) return;
    Down_date(k);
    if (a <= l && b >= r) {
      t[k].tag = max(t[k].tag, c);
      t[k].v = max(t[k].v, c);
      return;
    }
    Change((k << 1), a, b, c);
    Change((k << 1 | 1), a, b, c);
    Up_date(k);
  }
  int Query(int k, int a, int b) {
    int l = t[k].l, r = t[k].r;
    if (a > r || b < l) return 0;
    Down_date(k);
    if (a <= l && b >= r) return t[k].v;
    return max(Query((k << 1), a, b), Query((k << 1 | 1), a, b));
  }
} A, B;
int n, m, a[200005 << 1], cnt;
map<int, int> serch;
struct typ {
  int x, y, f;
} note[200005];
int main() {
  scanf("%d%d", &n, &m);
  cnt = 0;
  a[++cnt] = 1;
  serch.clear();
  for (int i = 1; i <= m; i++) {
    char ch[15];
    scanf("%d%d%s", &note[i].y, &note[i].x, ch);
    if (ch[0] == 'U')
      note[i].f = 1;
    else
      note[i].f = 0;
    a[++cnt] = note[i].x;
    a[++cnt] = note[i].y;
  }
  sort(a + 1, a + 1 + cnt);
  n = unique(a + 1, a + cnt + 1) - a - 1;
  for (int i = 1; i <= n; i++) serch[a[i]] = i;
  A.Build(1, 1, n);
  B.Build(1, 1, n);
  for (int i = 1; i <= m; i++) {
    int x = serch[note[i].x];
    int y = serch[note[i].y];
    if (note[i].f == 1) {
      int t = A.Query(1, y, y);
      printf("%d\n", a[x] - a[t]);
      A.Change(1, y, y, x);
      if (t + 1 <= x) B.Change(1, t + 1, x, y);
    } else {
      int t = B.Query(1, x, x);
      printf("%d\n", a[y] - a[t]);
      B.Change(1, x, x, y);
      if (t + 1 <= y) A.Change(1, t + 1, y, x);
    }
  }
  return 0;
}
