        #include <bits/stdc++.h>
        using namespace std;
   #define int long long
const int MAX = 510000;
const int MOD = 1000000007;

 
     signed main(){
    int n,m;
    cin>>n>>m;
    int a[n],b[n],c[n];
    map<int,int> t,y;
    t[0]=1;y[0]=1;
    for(int i=0;i<n;i++){
         cin>>a[i]>>b[i]>>c[i];
       t[a[i]]=1;
       t[b[i]]=1;
       y[c[i]]=1;  
    }
    int d[m],e[m],f[m];
    for(int i=0;i<m;i++){
         cin>>d[i]>>e[i]>>f[i];
         t[d[i]]=1;
         y[e[i]]=1;
         y[f[i]]=1;

    }
    vector<int> tx,yx;
    for(auto&& i : t){
         if(!tx.empty())tx[tx.size()-1]+=i.first;
         i.second=tx.size();
         tx.push_back(0);
         tx.push_back(-i.first);
    }
    tx.pop_back();
    for(auto&& i : y){
         if(!yx.empty())yx[yx.size()-1]+=i.first;
         i.second=yx.size();
         yx.push_back(0);
         yx.push_back(-i.first);
    }
    yx.pop_back();
    bool used[tx.size()][yx.size()];
     for(int i=0;i<tx.size();i++)fill(used[i],used[i]+yx.size(),false);
     for(int i=0;i<n;i++){
          int p=t[a[i]],q=t[b[i]],r=y[c[i]];
          for(int j=p;j<=q;j++)used[j][r]=true;
     }
     for(int i=0;i<m;i++){
          int p=t[d[i]],q=y[e[i]],r=y[f[i]];
          for(int j=q;j<=r;j++)used[p][j]=true;
     }

     queue<pair<int,int>> que;
     int ans=0;
     used[t[0]][y[0]]=true;
     que.push({t[0],y[0]});
     while(!que.empty()){
          pair<int,int> p=que.front();
          que.pop();
          if(p.first==0||p.first==tx.size()-1||p.second==0||p.second==yx.size()-1){
               cout<<"INF"<<endl;
               return 0;
          }
          if(!used[p.first-1][p.second]){
               ans+=tx[p.first-1]*yx[p.second];
               used[p.first-1][p.second]=true;
               que.push({p.first-1,p.second});
          }
          if(!used[p.first+1][p.second]){
               ans+=tx[p.first+1]*yx[p.second];
               used[p.first+1][p.second]=true;
               que.push({p.first+1,p.second});
          }
          if(!used[p.first][p.second-1]){
               ans+=tx[p.first]*yx[p.second-1];
               used[p.first][p.second-1]=true;
               que.push({p.first,p.second-1});
          }
          if(!used[p.first][p.second+1]){
               ans+=tx[p.first]*yx[p.second+1];
               used[p.first][p.second+1]=true;
               que.push({p.first,p.second+1});
          }
     }
     cout<<ans<<endl;
     return 0;

      }

        