#include <bits/stdc++.h>
using namespace std;
struct Chien {
  int n;
  vector<map<int, int> > dat;
  vector<vector<int> > laz;
  map<int, int> def;
  Chien() {}
  Chien(int n_) { init(n_); }
  void init(int n_) {
    n = 1;
    while (n < n_) n *= 2;
    dat.clear();
    dat.resize(2 * n - 1);
    laz.clear();
    laz.resize(2 * n - 1);
    construct(n_);
  }
  void construct(int n_) {
    for (int i = 0; i < n_; i++) dat[i + n - 1][0] = 1;
    for (int i = n - 2; i >= 0; i--) {
      for (pair<int, int> p : dat[i * 2 + 1]) dat[i][p.first] += p.second;
      for (pair<int, int> p : dat[i * 2 + 2]) dat[i][p.first] += p.second;
    }
  }
  inline void eval(int k) {
    if (dat[k].empty() || laz[k].empty()) return;
    if (k * 2 + 1 < n * 2 - 1) {
      for (int i : laz[k]) {
        if (!dat[k * 2 + 1].empty()) laz[k * 2 + 1].push_back(i);
        if (!dat[k * 2 + 2].empty()) laz[k * 2 + 2].push_back(i);
      }
    }
    for (int i = 0; i < (int)laz[k].size(); i++) {
      int tmp = dat[k][laz[k][i] - 1];
      dat[k].clear();
      if (!tmp) return;
      dat[k][laz[k][i]] = tmp;
    }
    laz[k].clear();
  }
  void rmv(map<int, int> m, int k) {
    for (pair<int, int> p : m) {
      if (dat[k].count(p.first)) {
        dat[k][p.first] -= p.second;
        if (!dat[k][p.first]) dat[k].erase(p.first);
      }
    }
    if (k) rmv(m, (k - 1) / 2);
  }
  void add(map<int, int> m, int k) {
    for (pair<int, int> p : m) dat[k][p.first] += p.second;
    if (k) add(m, (k - 1) / 2);
  }
  void update(int a, int b, int x, int k, int l, int r) {
    eval(k);
    if (r <= a || b <= l) return;
    if (a <= l && r <= b) {
      if (dat[k].empty()) return;
      laz[k].push_back(x);
      if (k) {
        rmv(dat[k], (k - 1) / 2);
        eval(k);
        add(dat[k], (k - 1) / 2);
      }
      return;
    }
    update(a, b, x, k * 2 + 1, l, (l + r) / 2);
    update(a, b, x, k * 2 + 2, (l + r) / 2, r);
  }
  void update(int a, int b, int x) { update(a, b, x, 0, 0, n); }
};
signed main() {
  int n, k, t;
  cin >> n >> k >> t;
  Chien ch(n);
  for (int i = 0; i < t; i++) {
    int l, r, x;
    cin >> l >> r >> x;
    ch.update(l - 1, r, x);
  }
  ch.eval(0);
  cout << ch.dat[0][k] << endl;
}
