import sys
input = sys.stdin.buffer.readline

def main():
    N, M = map(int, input().split())

    X = [-10**9, 0, 10**9]
    Y = [-10**9, 0, 10**9]

    tate = []
    yoko = []

    for _ in range(N):
        a, b, c = map(int, input().split())
        X.append(a)
        X.append(b)
        Y.append(c)
        tate.append((a, b, c))

    for _ in range(M):
        d, e, f = map(int, input().split())
        X.append(d)
        Y.append(e)
        Y.append(f)
        yoko.append((d, e, f))

    X = sorted(set(X))
    Y = sorted(set(Y))

    Cx = {val: idx * 2 for idx, val in enumerate(X)}
    Cy = {val: idx * 2 for idx, val in enumerate(Y)}

    H = len(X) * 2 - 1
    W = len(Y) * 2 - 1

    G = [[0 for j in range(W)] for i in range(H)]

    for a, b, c in tate:
        for i in range(Cx[a], Cx[b] + 1):
            G[i][Cy[c]] = -1

    for d, e, f in yoko:
        for j in range(Cy[e], Cy[f] + 1):
            G[Cx[d]][j] = -1

    for i in range(1, H, 2):
        for j in range(1, W, 2):
            if G[i][j] == -1:
                continue
            G[i][j] = (X[(i + 1) // 2] - X[(i - 1) // 2]) * (Y[(j + 1) // 2] - Y[(j - 1) // 2])

    stack = [Cx[0] * W + Cy[0]]
    visited = [[0 for j in range(W)] for i in range(H)]
    visited[Cx[0]][Cy[0]] = 1
    dx = [1, 0, -1, 0]
    dy = [0, 1, 0, -1]
    res = 0

    while stack:
        z = stack.pop()
        x, y = divmod(z, W)
        for k in range(4):
            nx = x + dx[k]
            ny = y + dy[k]
            if G[nx][ny] == -1:
                continue
            if nx == 0 or nx == H - 1 or ny == 0 or ny == W - 1:
                print('INF')
                break
            if visited[nx][ny]:
                continue
            visited[nx][ny] = 1
            res += G[nx][ny]
            stack.append(nx * W + ny)
        else:
            continue
        break
    else:
        print(res)

if __name__ == '__main__':
    main()