#include <bits/stdc++.h>
using namespace std;
int fa[100005], lc[100005], rc[100005], a[100005], h[100005];
int n, m;
int find(int x)
{
if(fa[x] != x) fa[x] = find(fa[x]);
return fa[x];
}
int mergex(int x, int y)
{
if(!x || !y) return x | y;
if(a[x] > a[y]) swap(x, y);
if(x > y && a[x] == a[y]) swap(x, y);
rc[x] = mergex(rc[x], y);
if(h[lc[x]] < h[rc[x]]) swap(lc[x], rc[x]);
h[x] = h[rc[x]] + 1;
return x;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
h[0] = -1;
for(int i = 1; i <= n; i++)
{
cin >> a[i];
fa[i] = i;
}
int t, x, y;
for(int i = 1; i <= m; i++)
{
cin >> t;
if(t == 1)
{
cin >> x >> y;
if(a[x] == -1 || a[y] == -1) continue;
x = find(x);
y = find(y);
if(x == y) continue;
fa[x] = fa[y] = mergex(x, y);
}
if(t == 2)
{
cin >> x;
if(a[x] == -1) {
cout << -1 << '\n';
continue;
}
x = find(x);
cout << a[x] << '\n';
a[x] = -1;
int lcx = lc[x], rcx = rc[x];
fa[lcx] = lcx, fa[rcx] = rcx;
fa[x] = mergex(lcx, rcx);
if(rcx) fa[rcx] = fa[x];
if(lcx) fa[lcx] = fa[x];
}
}
}