#include <bits/stdc++.h>
using namespace std;
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
int ddx[8] = {1, 1, 0, -1, -1, -1, 0, 1}, ddy[8] = {0, 1, 1, 1, 0, -1, -1, -1};
void mad(long long &a, long long b) {
  a = (a + b) % 1000000007;
  if (a < 0) a += 1000000007;
}
long long gcd(long long a, long long b) {
  if (!a) return b;
  return gcd(b % a, a);
}
int bit[1000005];
int n, m;
pair<int, int> lr[1000005];
vector<int> lx[1000005], rx[1000005];
void update(int u, int x) {
  for (int i = u; i < 1000005; i += (i & -i)) bit[i] += x;
}
long long get(int u) {
  long long sum = 0;
  for (int i = u; i; i -= (i & -i)) sum += bit[i];
  return sum;
}
void solve() {
  cin >> n >> m;
  long long ans = 0;
  for (int i = 0; i < n; i++) {
    int y, l, r;
    cin >> y >> l >> r;
    lx[l].push_back(y);
    rx[r].push_back(y);
    if (l == 0 && r == 1e6) ans++;
  }
  for (int i = 0; i < m; i++) {
    int x, l, r;
    cin >> x >> l >> r;
    lr[x] = pair<int, int>(l, r);
    if (l == 0 && r == 1e6) ans++;
  }
  for (int i = 0; i <= 1e6; i++) {
    for (int j : lx[i]) update(j, 1);
    int l = lr[i].first;
    int r = lr[i].second;
    long long cnt = get(r);
    if (l) cnt -= get((l - 1));
    ans += cnt;
    for (int j : rx[i]) update(j, -1);
  }
  cout << ans + 1;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int t;
  t = 1;
  while (t--) {
    solve();
  }
}
