#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
map<long long, long long> Vx, Vy, Hx, Hy, Lx, Ly;
long long Wx[4010];
long long Wy[4010];
short mov[5][4010][4010];
int main() {
  long long N, M;
  for (int i = 0; i < 4010; i++) {
    for (int j = 0; j < 4010; j++) {
      for (int k = 0; k < 5; k++) mov[k][i][j] = 0;
    }
    Wx[i] = 0;
    Wy[i] = 0;
  }
  cin >> N >> M;
  long long A, B, C, D, E, F, mxx, mxy;
  vector<tuple<long long, long long, long long>> abc(N), def(M);
  Vx.insert({0, 0});
  Vy.insert({0, 0});
  for (int i = 0; i < N; i++) {
    cin >> A >> B >> C;
    Vx.insert({A, 0});
    Vx.insert({B - 1, 0});
    Vy.insert({C, 0});
    abc[i] = make_tuple(A, B - 1, C);
  }
  for (int i = 0; i < M; i++) {
    cin >> C >> A >> B;
    Vy.insert({A, 0});
    Vy.insert({B - 1, 0});
    Vx.insert({C, 0});
    def[i] = make_tuple(A, B - 1, C);
  }
  A = 1;
  B = 0;
  for (auto& au : Vx) {
    au.second = A;
    Wx[A - 1] = au.first - B;
    B = au.first;
    A++;
  }
  mxx = A - 1;
  A = 1;
  B = 0;
  for (auto& au : Vy) {
    au.second = A;
    Wy[A - 1] = au.first - B;
    B = au.first;
    A++;
  }
  mxy = A - 1;
  for (int i = 0; i < N; i++) {
    tie(A, B, C) = abc[i];
    D = Vx[A];
    E = Vx[B];
    F = Vy[C];
    mov[0][D][F] = +1;
    mov[0][E + 1][F] = -1;
    mov[1][D][F - 1] = +1;
    mov[1][E + 1][F - 1] = -1;
  }
  for (int i = 0; i < M; i++) {
    tie(A, B, C) = def[i];
    D = Vy[A];
    E = Vy[B];
    F = Vx[C];
    mov[2][F][D] = +1;
    mov[2][F][E + 1] = -1;
    mov[3][F - 1][D] = +1;
    mov[3][F - 1][E + 1] = -1;
  }
  for (int i = 0; i < 4010; i++) {
    for (int j = 1; j < 4010; j++) {
      mov[0][j][i] += mov[0][j - 1][i];
      mov[1][j][i] += mov[1][j - 1][i];
      mov[2][i][j] += mov[2][i][j - 1];
      mov[3][i][j] += mov[3][i][j - 1];
    }
  }
  queue<pair<long long, long long>> Q;
  Q.push({Vx[0], Vy[0]});
  long long ans = 0;
  while (!Q.empty()) {
    tie(A, B) = Q.front();
    Q.pop();
    if (mov[4][A][B]) continue;
    mov[4][A][B] = 1;
    if (A == 0 || A == mxx || B == 0 || B == mxy) {
      cout << "INF" << endl;
      exit(1);
      return 0;
    }
    ans += Wx[A] * Wy[B];
    if (mov[0][A][B] == 0) {
      if (mov[4][A][B - 1] == 0) Q.push({A, B - 1});
    }
    if (mov[1][A][B] == 0) {
      if (mov[4][A][B + 1] == 0) Q.push({A, B + 1});
    }
    if (mov[2][A][B] == 0) {
      if (mov[4][A - 1][B] == 0) Q.push({A - 1, B});
    }
    if (mov[3][A][B] == 0) {
      if (mov[4][A + 1][B] == 0) Q.push({A + 1, B});
    }
  }
  cout << ans << endl;
}
