def METHOD_NAME(self, vals):
    fnames = self.get_main_fields()
    # ``load=''`` avoids returning tuple ``(rec.id, rec.name)`` for M2o
    # fields and simply returns ``rec.id``
    old_info_vals = {d["id"]: d for d in self.read(fnames, load="")}
    res = super().METHOD_NAME(vals)
    new_info_vals = {d["id"]: d for d in self.read(fnames, load="")}
    # old/new_info_vals dicts both have the same keys
    to_check_ids = []
    for aa_info_id, old_vals in old_info_vals.items():
        new_vals = new_info_vals[aa_info_id]
        common_fs = set(new_vals).intersection(old_vals)
        extra_fs = set(new_vals).union(old_vals) - common_fs
        if extra_fs or any(new_vals[k] != old_vals[k] for k in common_fs):
            to_check_ids.append(aa_info_id)
    if to_check_ids:
        self.browse(to_check_ids).check_and_normalize()
    return res