template<typename T, typename Iterator>
Iterator Find(const T& value, Iterator first, Iterator last) {
    using category = typename std::iterator_traits<Iterator>::iterator_category;
    if constexpr (std::is_same_v<category, std::random_access_iterator_tag>) {
        auto it = std::lower_bound(first, last, value);
        if (*it == value) {return it;} else {return last;}


} else {return std::find(first, last, value);}
}