#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 1000005;
int b[maxn];
vector<pair<int, int>> h[maxn], v[maxn];
int query(int x) {
  int ret = 0;
  while (x) {
    ret += b[x];
    x -= x & (-x);
  }
  return ret;
}
void update(int x, int d) {
  while (x < maxn) {
    b[x] += d;
    x += x & (-x);
  }
}
void go() {
  int n, m;
  cin >> n >> m;
  unsigned long long ans = 1;
  for (int i = 0; i < n; i++) {
    int y, l, r;
    cin >> y >> l >> r;
    y++, l++, r++;
    h[y].push_back({l, r});
    if (r - l == 1000000) {
      ans++;
    }
  }
  for (int i = 0; i < m; i++) {
    int x, u, d;
    cin >> x >> d >> u;
    x++, u++, d++;
    if (u - d == 1000000) {
      ans++;
    }
    v[d].push_back({x, 1});
    v[u + 1].push_back({x, -1});
  }
  for (int i = 1; i < 1000001 + 1; i++) {
    for (auto &j : v[i]) {
      update(j.first, j.second);
    }
    for (auto &j : h[i]) {
      ans += query(j.second) - query(j.first - 1);
    }
  }
  cout << ans << '\n';
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int c = 0;
  int t;
  if (!c) {
    t = 1;
  } else {
    cin >> t;
  }
  while (t--) {
    go();
  }
}
