from collections import deque
from bisect import bisect_left


N, M = map(int, input().split())
tate = []
yoko = []
X = set()
Y = set()
for _ in range(N):
    A, B, C = map(int, input().split())
    X.add(A)
    X.add(B)
    Y.add(C)
    tate.append((C, A, B))
for _ in range(M):
    D, E, F = map(int, input().split())
    X.add(D)
    Y.add(E)
    Y.add(F)
    yoko.append((D, E, F))

X = sorted(list(X))
Y = sorted(list(Y))
H = len(X)
W = len(Y)
tate.sort()
yoko.sort()
grid = [[[1] * 4 for _ in range(W)] for _ in range(H)]

ix = {}
for i, x in enumerate(X):
    ix[x] = i
jy = {}
for j, y in enumerate(Y):
    jy[y] = j

for c, a, b in tate:
    ia = ix[a]
    ib = ix[b]
    jc = jy[c]
    for i in range(ia, ib):
        if jc - 1 >= 0:
            grid[i][jc - 1][1] = 0
        grid[i][jc][3] = 0
for d, e, f in yoko:
    i_d = ix[d]
    je = jy[e]
    jf = jy[f]
    for j in range(je, jf):
        if i_d - 1 >= 0:
            grid[i_d - 1][j][2] = 0
        grid[i_d][j][0] = 0

q = deque()
x0 = bisect_left(X, 0) - (0 not in ix)
y0 = bisect_left(Y, 0) - (0 not in jy)
path = [[1] * W for _ in range(H)]
path[x0][y0] = 0
q.append((x0, y0))
direction = ((-1, 0), (0, 1), (1, 0), (0, -1))
cnt = 0
while q:
    x, y = q.popleft()
    cnt += (X[x + 1] - X[x]) * (Y[y + 1] - Y[y])
    for i, (dx, dy) in enumerate(direction):
        if grid[x][y][i]:
            nx = x + dx
            ny = y + dy
            if 0 <= nx < H - 1 and 0 <= ny < W - 1:
                if path[nx][ny]:
                    path[nx][ny] = 0
                    q.append((nx, ny))
            else:
                print('INF')
                exit()
print(cnt)
