#include <bits/stdc++.h>
using namespace std;
const long long int N = 2e5 + 5;
long long int jt[4 * N];
long long int fun(long long int a, long long int b) { return a + b; }
void build(long long int l, long long int h, long long int p) {
  if (l == h) {
    jt[p] = 1;
    return;
  }
  long long int m = (l + h) >> 1;
  build(l, m, 2 * p + 1);
  build(m + 1, h, 2 * p + 2);
  jt[p] = fun(jt[2 * p + 1], jt[2 * p + 2]);
  return;
}
void update(long long int l, long long int h, long long int p, long long int ql,
            long long int qh, long long int v) {
  if (l > qh || h < ql)
    return;
  else if (l >= ql && h <= qh) {
    jt[p] = v;
    return;
  }
  long long int m = (l + h) >> 1;
  update(l, m, 2 * p + 1, ql, qh, v);
  update(m + 1, h, 2 * p + 2, ql, qh, v);
  jt[p] = fun(jt[2 * p + 1], jt[2 * p + 2]);
  return;
}
long long int query(long long int l, long long int h, long long int p,
                    long long int v) {
  if (l == h) return l;
  long long int m = (l + h) >> 1;
  if (jt[2 * p + 1] >= v) return query(l, m, 2 * p + 1, v);
  return query(m + 1, h, 2 * p + 2, v - jt[2 * p + 1]);
}
set<long long int> s[256];
string jtt;
void work(long long int l, long long int h, long long int p) {
  if (l == h) {
    if (jt[p] == 1) cout << jtt[l];
    return;
  }
  long long int m = (l + h) >> 1;
  work(l, m, 2 * p + 1);
  work(m + 1, h, 2 * p + 2);
  return;
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  srand(time(NULL));
  long long int n, m;
  cin >> n >> m;
  build(0, n - 1, 0);
  cin >> jtt;
  for (long long int i = 0; i < n; i++) s[(long long int)(jtt[i])].insert(i);
  for (long long int i = 0; i < m; i++) {
    long long int l, h;
    char c;
    cin >> l >> h >> c;
    l = query(0, n - 1, 0, l);
    h = query(0, n - 1, 0, h);
    vector<long long int> temp;
    auto it = s[(long long int)(c)].lower_bound(l);
    while (it != s[(long long int)(c)].end()) {
      if (*it <= h)
        temp.push_back(*it);
      else
        break;
      it++;
    }
    for (auto it : temp)
      s[(long long int)(c)].erase(it), update(0, n - 1, 0, it, it, 0);
  }
  work(0, n - 1, 0);
}
