#!/usr/bin/env python3

import sys
from pprint import pprint
sys.setrecursionlimit(300000)


def solve(N: int, M: int, A: "List[int]", B: "List[int]", C: "List[int]", D: "List[int]", E: "List[int]", F: "List[int]"):
    xs, ys = {}, {}
    xs[0] = 0
    ys[0] = 0
    for i in range(N):
        xs[A[i]] = 0
        xs[B[i]] = 0
        ys[C[i]] = 0
    for i in range(M):
        xs[D[i]] = 0
        ys[E[i]] = 0
        ys[F[i]] = 0

    sx, sy = [], []
    ox = sorted(xs.keys())
    for i, x in enumerate(ox):
        xs[x] = i
        sx.append(x)
    oy = sorted(ys.keys())
    for i, y in enumerate(oy):
        ys[y] = i
        sy.append(y)

    h, w = len(sy) * 2, len(sx) * 2
    g = [[0] * w for _ in range(h)]
    for i in range(N):
        y = ys[C[i]] * 2
        for x in range(xs[A[i]] * 2, xs[B[i]] * 2 + 1):
            g[y][x] = 1
    for i in range(M):
        x = xs[D[i]] * 2
        for y in range(ys[E[i]] * 2, ys[F[i]] * 2 + 1):
            g[y][x] = 1

    x, y = xs[0] * 2, ys[0] * 2
    g[y][x] = 2
    q = [(x, y)]
    dx = [0, -1, 0, 1]
    dy = [1, 0, -1, 0]
    ret = 0
    #pprint(g)
    while True:
        nex = []
        for x, y in q:
            if x % 2 and y % 2:
                xx = sx[x // 2 + 1] - sx[x // 2]
                yy = sy[y // 2 + 1] - sy[y // 2]
                ret += xx * yy
            for k in range(len(dx)):
                tx, ty = x + dx[k], y + dy[k]
                if tx <= 0 or tx >= w - 1 or ty <= 0 or ty >= h - 1:
                    print('INF')
                    return
                if g[ty][tx] == 0:
                    g[ty][tx] = 2
                    nex.append((tx, ty))
        if len(nex) == 0:
            break
        q = nex
    #pprint(g)

    #ret = 0
    #for y in range(h):
    #    for x in range(w):
    #        if g[y][x] != 2:
    #            continue
    #        if x == 0 or x == w - 1 or y == 0 or y == h - 1:
    #            print('INF')
    #            return
    #        if x % 2 == 0 or y % 2 == 0:
    #            continue
    #        xx = sx[x // 2 + 1] - sx[x // 2]
    #        yy = sy[y // 2 + 1] - sy[y // 2]
    #        ret += xx * yy
    print(ret)
    return

def main():
    def iterate_tokens():
        for line in sys.stdin:
            for word in line.split():
                yield word
    tokens = iterate_tokens()
    N = int(next(tokens))  # type: int
    M = int(next(tokens))  # type: int
    A = [int()] * (N)  # type: "List[int]"
    B = [int()] * (N)  # type: "List[int]"
    C = [int()] * (N)  # type: "List[int]"
    for i in range(N):
        A[i] = int(next(tokens))
        B[i] = int(next(tokens))
        C[i] = int(next(tokens))
    D = [int()] * (M)  # type: "List[int]"
    E = [int()] * (M)  # type: "List[int]"
    F = [int()] * (M)  # type: "List[int]"
    for i in range(M):
        D[i] = int(next(tokens))
        E[i] = int(next(tokens))
        F[i] = int(next(tokens))
    solve(N, M, A, B, C, D, E, F)

if __name__ == '__main__':
    main()
