Language: C++

#include <iostream>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <queue>
#include <set>
#include <map>

using namespace std;
typedef long long ll;

vector<ll> pow, sum;

int depth(ll n){
    for(int i = 0; i < sum.size(); i++){
        if(sum[i] >= n) return i;
    }
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout << setprecision(10) << fixed;
    ll N, Q; cin >> N >> Q;
    ll cur = 1;
    ll tmp = 1;
    pow.push_back(1);
    sum.push_back(1);
    while(sum <= 2e9){
        cur *= N;
        tmp += cur;
        pow.push_back(cur);
        sum.push_back(tmp);
    }
    for(int i = 0; i < Q; i++){
        int v, w; cin >> v >> w;
        set<int> st; st.insert(v);
        int d = depth(v);
        while(v != 1){
            int m = (v-sum[d-1]+pow[d-1]-1)/pow[d-1];
            if(d >= 2) v = sum[d-2]+pow[d-2]*m;
            else v = 1;
            st.insert(v);
            d--;
        }
        if(st.count(w) != 0){
            cout << w << endl;
            continue;
        }
        d = depth(w);
        while(w != 1){
            int m = (w-sum[d-1]+pow[d-1]-1)/pow[d-1];
            if(d >= 2) w = sum[d-2]+pow[d-2]*m;
            else w = 1;
            if(st.count(w) != 0) {
                cout << w << endl;
                break;
            }
            d--;
        }
    }
}

Compiler output:
a.cc:12:12: warning: built-in function 'pow' declared as non-function [-Wbuiltin-declaration-mismatch]
   12 | vector<ll> pow, sum;
      |            ^~~
a.cc: In function 'int main()':
a.cc:29:15: error: no match for 'operator<=' (operand types are 'std::vector<long long int>' and 'double')
   29 |     while(sum <= 2e9){
      |           ~~~ ^~ ~~~
      |           |      |
      |           |      double
      |           std::vector<long long int>
In file included from /usr/include/c++/14/string:48,
                 from /usr/include/c++/14/bits/locale_classes.h:40,
                 from /usr/include/c++/14/bits/ios_base.h:41,
                 from /usr/include/c++/14/ios:44,
                 from /usr/include/c++/14/ostream:40,
                 from /usr/include/c++/14/iostream:41,
                 from a.cc:1:
/usr/include/c++/14/bits/stl_iterator.h:469:5: note: candidate: 'template<class _Iterator> constexpr bool std::operator<=(const reverse_iterator<_Iterator>&, const reverse_iterator<_Iterator>&)'
  469 |     operator<=(const reverse_iterator<_Iterator>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:469:5: note:   template argument deduction/substitution failed:
a.cc:29:18: note:   'std::vector<long long int>' is not derived from 'const std::reverse_iterator<_Iterator>'
   29 |     while(sum <= 2e9){
      |                  ^~~
/usr/include/c++/14/bits/stl_iterator.h:513:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr bool std::operator<=(const reverse_iterator<_Iterator>&, const reverse_iterator<_IteratorR>&)'
  513 |     operator<=(const reverse_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:513:5: note:   template argument deduction/substitution failed:
a.cc:29:18: note:   'std::vector<long long int>' is not derived from 'const std::reverse_iterator<_Iterator>'
   29 |     while(sum <= 2e9){
      |                  ^~~
/usr/include/c++/14/bits/stl_iterator.h:1704:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr bool std::operator<=(const move_iterator<_IteratorL>&, const move_iterator<_IteratorR>&)'
 1704 |     operator<=(const move_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:1704:5: note:   template argument deduction/substitution failed:
a.cc:29:18: note:   'std::vector<long long int>' is not derived from 'const std::move_iterator<_IteratorL>'
   29 |     while(sum <= 2e9){
      |                  ^~~
/usr/include/c++/14/bits/stl_iterator.h:1767:5: note: candidate: 'template<class _Iterator> constexpr bool std::operator<=(const move_iterator<_IteratorL>&, const move_iterator<_IteratorL>&)'
 1767 |     operator<=(const move_iterator<_Iterator>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:1767:5: note:   template argument deduction/substitution failed:
a.cc:29:18: note:   'std::vector<long long int>' is not derived from 'const std::move_iterator<_IteratorL>'
   29 |     while(sum <= 2e9){
      |                  ^~~
In file included from /usr/include/c++/14/bits/stl_algobase.h:64,
                 from /usr/include/c++/14/string:51:
/usr/include/c++/14/bits/stl_pair.h:1064:5: note: candidate: 'template<class _T1, class _T2> constexpr bool std::operator<=(const pair<_T1, _T2>&, const pair<_T1, _T2>&)'
 1064 |     operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_pair.h:1064:5: note:   template argument deduction/substitution failed:
a.cc:29:18: note:   'std::vector<long long int>' is not derived from 'const std::pair<_T1, _T2>'
   29 |     while(sum <= 2e9){
      |                  ^~~
In file included from /usr/include/c++/14/bits/basic_string.h:47,
                 from /usr/include/c++/14/string:54:
/usr/include/c++/14/string_view:717:5: note: candidate: 'template<class _CharT, class _Traits> constexpr bool std::operator<=(basic_string_view<_CharT, _Traits>, basic_string_view<_CharT, _Traits>)'
  717 |     operator<=(basic_string_view<_CharT, _Traits> __x,
      |     ^~~~~~~~
/usr/include/c++/14/string_view:717:5: note:   template argument deduction/substitution failed:
a.cc:29:18: note:   'std::vector<long long int>' is not derived from 'std::basic_string_view<_CharT, _Traits>'
   29 |     while(sum <= 2e9){
      |                  ^~~
/usr/include/c++/14/string_view:724:5: note: candidate: 'template<class _CharT, class _Traits> constexpr bool std::operator<=(basic_string_view<_CharT, _Traits>, __type_identity_t<basic_string_view<_CharT, _Traits> >)'
  724 |     operator<=(basic_string_view<_CharT, _Traits> __x,
      |     ^~~~~~~~
/usr/include/c++/14/string_view:724:5: note:   template argument deduction/substitution failed:
a.cc:29:18: note:   'std::vector<long long int>' is not derived from 'std::basic_string_view<_CharT, _Traits>'
   29 |     while(sum <= 2e9){
      |                  ^~~
/usr/include/c++/14/string_view:732:5: note: candidate: 'template<class _CharT, class _Traits> constexpr bool std::operator<=(__type_identity_t<basic_string_view<_CharT, _Traits> >, basic_string_view<_CharT, _Traits>)'
  732 |     operator<=(__type_identity_t<basic_string_view<_CharT, _Traits>> __x,
      |     ^~~~~~~~
/usr/include/c++/14/string_view:732:5: note:   template argument deduction/substitution failed:
a.cc:29:18: note:   mismatched types 'std::basic_string_view<_CharT, _Traits>' and 'double'
   29 |     while(sum <= 2e9){
      |                  ^~~
/usr/include/c++/14/bits/basic_string.h:3956:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator<=(const __cxx11::basic_string<_CharT, _Traits, _Allocator>&, const __cxx11::basic_string<_CharT, _Traits, _Allocator>&)'
 3956 |     operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:3956:5: note:   template argument deduction/substitution failed:
a.cc:29:18: note:   'std::vector<long long int>' is not derived from 'const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>'
   29 |     while(sum <= 2e9){
      |                  ^~~
/usr/include/c++/14/bits/basic_string.h:3970:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator<=(const __cxx11::basic_string<_CharT, _Traits, _Allocator>&, const _CharT*)'
 3970 |     operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:3970:5: note:   template argument deduction/substitution failed:
a.cc:29:18: note:   'std::vector<long long int>' is not derived from 'const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>'
   29 |     while(sum <= 2e9){
      |                  ^~~
/usr/include/c++/14/bits/basic_string.h:3983:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator<=(const _CharT*, const __cxx11::basic_string<_CharT, _Traits, _Allocator>&)'
 3983 |     operator<=(const _CharT* __lhs,
      |     ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:3983:5: note:   template argument deduction/substitution failed:
a.cc:29:18: note:   mismatched types 'const _CharT*' and 'std::vector<long long int>'
   29 |     while(sum <= 2e9){
      |                  ^~~
In file included from /usr/include/c++/14/bits/memory_resource.h:47,
                 from /usr/include/c++/14/string:68:
/usr/include/c++/14/tuple:2625:5: note: candidate: 'template<class ... _TElements, class ... _UElements> constexpr bool std::operator<=(const tuple<_UTypes ...>&, const tuple<_Elements ...>&)'
 2625 |     operator<=(const tuple<_TElements...>& __t,
      |     ^~~~~~~~
/usr/include/c++/14/tuple:2625:5: note:   template argument deduction/substitution failed:
a.cc:29:18: note:   'std::vector<long long int>' is not derived from 'const std::tuple<_UTypes ...>'
   29 |     while(sum <= 2e9){
      |                  ^~~
In file included from /usr/include/c++/14/vector:66,
                 from a.cc:4:
/usr/include/c++/14/bits/stl_vector.h:2108:5: note: candidate: 'template<class _Tp, class _Alloc> bool std::operator<=(const vector<_Tp, _Alloc>&, const vector<_Tp, _Alloc>&)'
 2108 |     operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_vector.h:2108:5: note:   template argument deduction/substitution failed:
a.cc:29:18: note:   mismatched types 'const std::vector<_Tp, _Alloc>' and 'double'
   29 |     while(sum <= 2e9){
      |                  ^~~
In file included from /usr/include/c++/14/deque:66,
                 from /usr/include/c++/14/queue:62,
                 from a.cc:5:
/usr/include/c++/14/bits/stl_deque.h:2356:5: note: candidate: 'template<class _Tp, class _Alloc> bool std::operator<=(const deque<_Tp, _Alloc>&, const deque<_Tp, _Alloc>&)'
 2356 |     operator<=(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_deque.h:2356:5: note:   template argument deduction/substitution failed:
a.cc:29:18: note:   'std::vector<long long int>' is not derived from 'const std::deque<_Tp, _Alloc>'
   29 |     while(sum <= 2e9){
      |                  ^~~
In file included from /usr/include/c++/14/queue:66:
/usr/include/c++/14/bits/stl_queue.h:418:5: note: candidate: 'template<class _Tp, class _Seq> bool std::operator<=(const queue<_Tp, _Seq>&, const queue<_Tp, _Seq>&)'
  418 |     operator<=(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_queue.h:418:5: note:   template argument deduction/substitution failed:
a.cc:29:18: note:   'std::vector<long long int>' is not derived from 'const std::queue<_Tp, _Seq>'
   29 |     while(sum <= 2e9){
      |                  ^~~
In file included from /usr/include/c++/14/set:63,
                 from a.cc:6:
/usr/include/c++/14/bits/stl_set.h:1046:5: note: candidate: 'template<class _Key, class _Compare, class _Alloc> bool std::operator<=(const set<_Key, _Compare, _Allocator>&, const set<_Key, _Compare, _Allocator>&)'
 1046 |     operator<=(const set<_Key, _Compare, _Alloc>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_set.h:1