You are given an integer N. Consider an infinite N-ary tree where each vertex is indexed with a unique positive integer. The root of the tree has the index 1. Process Q queries to find the index of the lowest common ancestor of two given vertices. The lowest common ancestor of two vertices v and w is the farthest vertex from the root that is an ancestor of both v and w. Input is given in the format N Q followed by pairs of vertices v_i and w_i. Output the index of the lowest common ancestor for each query. Constraints: 1 ≤ N ≤ 10^9, 1 ≤ Q ≤ 10^5, 1 ≤ v_i < w_i ≤ 10^9.

# Buggy version:
n,q=map(int,input().split())
for i in range(q):
    v,w=map(int,input().split())
    while v!=w:
        if v>w:
            v=(v+n-2)//n
        else:
            w=(w+n-2)//n
        print(v)

# Fixed version:
n,q=map(int,input().split())
if n==1:
    for i in range(q):
        v,w=map(int,input().split())
        print(min(v,w))
else:
    for i in range(q):
        v,w=map(int,input().split())
        while v!=w:
            if v>w:v,w=w,v
            w=(w+n-2)//n
        print(v)

# Buggy version:
from collections import defaultdict, deque, Counter
from heapq import heappush, heappop, heapify
import math
import bisect
import random
from itertools import permutations, accumulate, combinations
import sys
import string
from bisect import bisect_left, bisect_right
from math import factorial, ceil, floor


INF = float('inf')
def LI(): return list(map(int, sys.stdin.readline().split()))
def I(): return int(sys.stdin.readline())
def LIM(): return list(map(lambda x:int(x) - 1, sys.stdin.readline().split()))
def LS(): return sys.stdin.readline().split()
def S(): return sys.stdin.readline().strip()
def IR(n): return [I() for i in range(n)]
def LIR(n): return [LI() for i in range(n)]
def LIRM(n): return [LIM() for i in range(n)]
def SR(n): return [S() for i in range(n)]
def LSR(n): return [LS() for i in range(n)]
def SRL(n): return [list(S()) for i in range(n)]
mod = 1000000007


n, q = LI()




for i, j in LIR(q):
    if n == i:
        print(min(i, j))
    else:
        while i != j:
            if i < j:
                i, j = j, i
            i = (i + 1) // n
        print(i)

# Fixed version:
from collections import defaultdict, deque, Counter
from heapq import heappush, heappop, heapify
import math
import bisect
import random
from itertools import permutations, accumulate, combinations
import sys
import string
from bisect import bisect_left, bisect_right
from math import factorial, ceil, floor


INF = float('inf')
def LI(): return list(map(int, sys.stdin.readline().split()))
def I(): return int(sys.stdin.readline())
def LIM(): return list(map(lambda x:int(x) - 1, sys.stdin.readline().split()))
def LS(): return sys.stdin.readline().split()
def S(): return sys.stdin.readline().strip()
def IR(n): return [I() for i in range(n)]
def LIR(n): return [LI() for i in range(n)]
def LIRM(n): return [LIM() for i in range(n)]
def SR(n): return [S() for i in range(n)]
def LSR(n): return [LS() for i in range(n)]
def SRL(n): return [list(S()) for i in range(n)]
mod = 1000000007


n, q = LI()




for i, j in LIR(q):
    if n == 1:
        print(min(i, j))
    else:
        while i != j:
            if i < j:
                i, j = j, i
            i = (i - 2) // n + 1
        print(i)