upper_bound and upper_bound_n algorithms