let union u v =
  if overlap u v < 0 then [u;v]
  else [{lo = min u.lo v.lo; hi = max u.hi v.hi}]