let union m1 m2 = 
    M.merge (fun k v1 v2 -> match v2 with | None -> v1 | Some _ -> v2) m1 m2