std::ranges::merge (for example) returns a bundle of iterators containing the end of the merged range, obviously, but also the end of the two input ranges. Cppreference says (https://en.cppreference.com/w/cpp/algorithm/ranges)
Additionally, the return types of most algorithms have been changed to return all potentially useful information computed during the execution of the algorithm.
What is the point of returning the end of the input ranges?