def safe_mod(a, b): c = a % b return c + b if c < 0 else c def ext_gcd(a, b): u, v, x, y = 1, 0, 0, 1 while a > 0: q = b // a x, u = u, x - q * u y, v = v, y - q * v b, a = a, b - q * a return x, y def op(a, b): ret, p = 0, 1 while a > 0 or b > 0: ret += (a + b) % k * p a //= k b //= k p *= k return ret def op_pow(a, n): if n == 0: return 0 n = safe_mod(n, k) ret, p = 0, 1 while a > 0: ret += safe_mod(a % k * n, k) * p a //= k p *= k return ret def query1(x): a = [x] for i in reversed(range(log)): g = msd[i] v = [0] * len(a) prod = [0] * (len(a) + 1) for j in range(len(a)): u = a[j] // powk[i] prod[j], v[j] = ext_gcd(g, u) g = g * prod[j] + u * v[j] prod[j] = safe_mod(prod[j], k) v[j] = safe_mod(v[j], k) for j in reversed(range(1, len(a))): prod[j - 1] = safe_mod(prod[j - 1] * prod[j], k) t = op_pow(basis[i], prod[0]) prod[-1] = 1 for j in range(len(a)): t = op(t, op_pow(a[j], v[j] * prod[j + 1] % k)) for j in range(len(a)): a[j] = op(a[j], op_pow(t, -(a[j] // powk[i]) // g)) a.append(op(basis[i], op_pow(t, -msd[i] // g))) if g != k: basis[i] = t msd[i] = g for i in range(log): cnt[i + 1] = cnt[i] * (k // msd[i]) return def query2(x): if x > cnt[log]: print(-1) return x -= 1 ans = 0 for i in reversed(range(log)): if basis[i] == 0: continue u, v = msd[i], ans // powk[i] ans = op(ans, op_pow(basis[i], x // cnt[i] - v // u)) x %= cnt[i] print(ans) return def query3(x): x += 1 ans, y = 0, 0 for i in reversed(range(log)): if basis[i] == 0: u, v = x // powk[i] % k, y // powk[i] % k if u == v: continue if u > v: ans += cnt[i] break else: d, u = y // powk[i] % k, msd[i] y = op(y, op_pow(basis[i], -(d // u))) d %= u v = x // powk[i] % k - d ans += (v + u - 1) // u * cnt[i] if v % u > 0: break y = op(y, op_pow(basis[i], v // u)) print(ans) return A_MAX = 1e9 k, q = list(map(int, input().split(" "))) powk = [1] while powk[-1] * k <= A_MAX: powk.append(powk[-1] * k) log = len(powk) basis = [0] * log msd = [k] * log cnt = [1] * (log + 1) for _ in range(q): t, x = list(map(int, input().split(" "))) if t == 1: query1(x) if t == 2: query2(x) if t == 3: query3(x)