1 #include <iostream>
2 #include <algorithm>
3
4 using namespace std;
5
6 const int maxn = 1000003;
7
8 int n, m, father[maxn], op[maxn], ans[maxn], size[maxn];
9
10 int findRoot(int x) {
11 int p, q;
12 for (p = x; p != father[p]; p = father[p]);
13 for (; x != p; q = father[x], father[x] = p, x = q);
14 return p;
15 }
16
17 void init(int n) {
18 for (int i = 1; i <= n; ++ i) {
19 father[i] = i - 1;
20 size[i] = 1;
21 }
22 }
23
24 int main() {
25 cin >> n >> m;
26 init(n);
27 for (int i = 0; i < m; ++ i) {
28 int opt, v;
29 cin >> opt >> v;
30 if (opt == 1) { // 插入
31 father[v] = v;
32 op[i] = -v;
33 } else { // 查询
34 op[i] = v;
35 }
36 }
37 for (int i = m - 1; i >= 0; -- i) {
38 if (op[i] < 0) { // 插入,现在要删除它
39 father[-op[i]] = -op[i] - 1;
40 } else { // 查询前趋
41 ans[i] = findRoot(op[i] - 1);
42 }
43 }
44 for (int i = 0; i < m; ++ i) {
45 if (ans[i]) {
46 cout << ans[i] << endl;
47 }
48 }
49 }