def inf
  puts "INF"
  exit
end

n,m = gets.strip.split.map(&:to_i)
x = []
y = []
vxxy = []
n.times { |i|
  a,b,c = gets.strip.split.map(&:to_i)
  vxxy.append [a,b,c]
  x.append a
  x.append b
  y.append c
}
hxyy = []
m.times {
  a,b,c = gets.strip.split.map(&:to_i)
  hxyy.append [a,b,c]
  x.append a
  y.append b
  y.append c
}
x.uniq!
x.sort!
y.uniq!
y.sort!

mp = Array.new(x.size * 2 + 1){Array.new(y.size * 2 + 1)}
vxxy.each do |a,b,c|
  l = x.index(a)
  m = x.index(b)
  n = y.index(c)
  (l*2+1).upto(m*2+1) {|i| mp[i][n*2+1] = true}
end 
hxyy.each do |a,b,c|
  l = x.index(a)
  m = y.index(b)
  n = y.index(c)
  (m*2+1).upto(n*2+1) {|i| mp[l*2+1][i] = true}
end
ans = 0
xx = x.index{|v|v>=0}
yy = y.index{|v|v>=0}
if !xx || !yy then inf end
q = [[xx,yy]]
while !q.empty?
  xx,yy = q.pop
  inf if xx==0 || xx==x.size || yy==0 || yy==y.size
  x2 = xx * 2
  y2 = yy * 2
  next if mp[x2][y2]
  mp[x2][y2] = true
  ans += (x[xx]-x[xx-1])*(y[yy]-y[yy-1])
  q.append [xx+1,yy] if !mp[x2+1][y2] && !mp[x2+2][y2]
  q.append [xx-1,yy] if !mp[x2-1][y2] && !mp[x2-2][y2]
  q.append [xx,yy-1] if !mp[x2][y2-1] && !mp[x2][y2-2]
  q.append [xx,yy+1] if !mp[x2][y2+1] && !mp[x2][y2+2]
end
p ans