#include <bits/stdc++.h>
using namespace std;
int st[1 << 20];
void st_init(int k, int s, int e) {
  st[k] = e - s;
  if (s + 1 == e) return;
  int m = (s + e) / 2;
  st_init(2 * k, s, m);
  st_init(2 * k + 1, m, e);
}
void st_upd(int k, int s, int e, int p) {
  st[k]--;
  if (s + 1 == e) return;
  int m = (s + e) / 2;
  if (p < m)
    st_upd(2 * k, s, m, p);
  else
    st_upd(2 * k + 1, m, e, p);
}
int st_query(int k, int s, int e, int q) {
  if (q == st[k]) return e;
  if (s + 1 == e) return s;
  int m = (s + e) / 2;
  if (q <= st[2 * k]) return st_query(2 * k, s, m, q);
  return st_query(2 * k + 1, m, e, q - st[2 * k]);
}
set<int> w[256];
char s[200005];
bool d[200005];
int n, m;
int main() {
  scanf("%d%d%s", &n, &m, s);
  for (int i = 0, ThxDem = n; i < ThxDem; ++i) w[s[i]].insert(i);
  st_init(1, 0, n);
  while (m--) {
    int l, r;
    char t[4];
    scanf("%d%d%s", &l, &r, t);
    l--;
    l = st_query(1, 0, n, l);
    r = st_query(1, 0, n, r);
    auto it = w[t[0]].lower_bound(l);
    vector<int> z;
    while (it != w[t[0]].end() && *it < r) {
      z.push_back(*it);
      st_upd(1, 0, n, *it);
      d[*it] = true;
      ++it;
    }
    for (int x : z) w[t[0]].erase(x);
  }
  for (int i = 0, ThxDem = n; i < ThxDem; ++i)
    if (!d[i]) putchar(s[i]);
  puts("");
  return 0;
}
