#include<map>
#include<set>
#include<ctime>
#include<cmath>
#include<queue>
#include<bitset>
#include<vector>
#include<cstdio>
#include<cctype>
#include<string>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define gc getchar()//(p1==p2&&(p2=(p1=buf)+fread(buf,1,size,stdin),p1==p2)?EOF:*p1++)
#define lc (x<<1)
#define rc (x<<1|1)
#define fi first
#define se second
#define mk make_pair
#define pb push_back
#define ll long long
#define pi pair<int,int>
using namespace std;
const int N=1010,M=3*N,size=1<<20,mod=998244353,inf=1.1e9;

//char buf[size],*p1=buf,*p2=buf;
template<class o> void qr(o &x) {
	x=0; int f=1; char c=gc;
	while(!isdigit(c)){if(c=='-')f=-1; c=gc;}
	while(isdigit(c))x=x*10+c-'0',c=gc;
	x*=f;
}
template<class o> void qw(o x) {
	if(x<0) putchar('-'),x=-x;
	if(x>9) qw(x/10);
	putchar(x%10+'0');
}
template<class o> void pr1(o x) {qw(x); putchar(' ');}
template<class o> void pr2(o x) {qw(x); puts("");}

//math
ll gcd(ll x,ll y) {return !x?y:gcd(y%x,x);}
ll lcm(ll x,ll y) {return x/gcd(x,y)*y;}
ll power(ll a,ll b=mod-2) {
	ll c=1;
	while(b) {
		if(b&1) c=c*a%mod;
		b /= 2; a=a*a%mod;
	}
	return c;
}

int n,m,a[N],b[N],c[N],d[N],e[N],f[N],x[M],xc,y[M],yc;
int getx(int t) {return lower_bound(x+1,x+xc+1,t)-x;}
int gety(int t) {return lower_bound(y+1,y+yc+1,t)-y;}

const int dx[]={1,-1,0,0};
const int dy[]={0,0,1,-1};

pi q[M*M]; int l=1,r;
bool V[M][M];
int z[M][M];
void add(int x,int y) {q[++r]=mk(x,y); V[x][y]=1;}

int main() {
	qr(n); qr(m);
	for(int i=1;i<=n;i++) {
		qr(a[i]); qr(b[i]); qr(c[i]);
		x[++xc]=a[i];
		x[++xc]=b[i];
		y[++yc]=c[i];
	}
	for(int i=1;i<=m;i++) {
		qr(d[i]); qr(e[i]); qr(f[i]);
		x[++xc]=d[i];
		y[++yc]=e[i];
		y[++yc]=f[i];
	}
	x[++xc]=-inf;
	x[++xc]=0;
	x[++xc]=inf;
	y[++yc]=-inf;
	y[++yc]=0;
	y[++yc]=inf;
	sort(x+1,x+xc+1); xc=unique(x+1,x+xc+1)-(x+1);
	sort(y+1,y+yc+1); yc=unique(y+1,y+yc+1)-(y+1);
	for(int i=1;i<=n;i++) {
		int u=getx(a[i]),v=getx(b[i]),w=gety(c[i]);
		for(int j=u;j<v;j++)
			z[j][w-1]|=1<<2,
			z[j][w]|=1<<3;
	}
	for(int i=1;i<=m;i++) {
		int u=getx(d[i]),v=gety(e[i]),w=gety(f[i]);
		for(int j=v;j<w;j++)
			z[u][j]|=1<<1,
			z[u-1][j]|=1<<0;
	}
	int sx=getx(0),sy=gety(0);
	for(int i=-1;i<=0;i++) for(int j=-1;j<=0;j++) add(sx+i,sy+j);
	while(l<=r) {
		pi now=q[l++];
		int u=now.fi,v=now.se;
		for(int t=0;t<4;t++) if((~z[u][v])>>t&1) {
			int tx=u+dx[t],ty=v+dy[t];
			if(tx&&tx<xc&&ty&&ty<yc&&!V[tx][ty]) 
				add(tx,ty);
		}
	}
	for(int i=1;i<yc;i++)
		if(V[1][i]||V[xc-1][i]) return puts("INF"),0;
	for(int j=1;j<xc;j++)
		if(V[j][1]||V[j][yc-1]) return puts("INF"),0;
	ll ans=0;
	for(int i=1;i<xc;i++)
		for(int j=1;j<yc;j++) if(V[i][j])
			ans+=(ll)(x[i+1]-x[i])*(y[j+1]-y[j]);
	pr2(ans);
	return 0;
}/*
2 2
-2 3 2
-3 5 -7
-1 -8 5
2 -9 7

*/

