#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; long long qinf = 1000000007; int n, n1; vector segtree; void segset() { for (int i = 0; i < 500050; i++) { segtree.emplace_back(qinf); } n1 = n; int t = 1; while (t < n) { t *= 2; } n = t; } void add(int i, long long x) { int now = n + i - 1; segtree[now] = x; while (now > 0) { now = now / 2; segtree[now] = min(segtree[now * 2], segtree[now * 2 + 1]); } } long long qans1(int l, int r, int i, int nl, int nr) { if (nl > r || l > nr) { return qinf; } else if (nl >= l && nr <= r) { return segtree[i]; } else { long long x = qans1(l, r, i * 2, nl, (nl + nr) / 2); long long y = qans1(l, r, i * 2 + 1, (nl + nr) / 2 + 1, nr); return min(x, y); } } long long q_ans(int l, int r) { return qans1(l, r, 1, 1, n); } long long a[500050], in[500050]; int main() { int q; cin >> n >> q; segset(); for (int i = 1; i <= n1; i++) { cin >> a[i]; in[a[i]] = i; add(i, a[i]); } for (int i = 0; i < q; i++) { int query, l, r; cin >> query >> l >> r; if (query == 1) { add(l, a[r]); add(r, a[l]); swap(a[l], a[r]); swap(in[a[l]], in[a[r]]); } else { cout << in[q_ans(l, r)] << endl; } } }