#include #define rep(i,n) for(int i=0;i<(n);i++) using namespace std; const int INF=1<<29; class segment_tree{ int n; vector dat; int query(int l,int r,int a,int b,int u){ if(l<=a && b<=r) return dat[u]; int res=INF; int c=(a+b)/2; if(l0) u=(u-1)/2, dat[u]=min(dat[2*u+1],dat[2*u+2]); } int query(int l,int r){ return query(l,r,0,n,0); } }; int main(){ int n,q; scanf("%d%d",&n,&q); vector p(n),inv(n); rep(i,n){ scanf("%d",&p[i]); p[i]--; inv[p[i]]=i; } segment_tree ST(n); rep(i,n) ST.update(i,p[i]); rep(_,q){ int type,l,r; scanf("%d%d%d",&type,&l,&r); if(type==1){ l--; r--; ST.update(l,p[r]); ST.update(r,p[l]); swap(inv[p[l]],inv[p[r]]); swap(p[l],p[r]); } else{ l--; printf("%d\n",inv[ST.query(l,r)]+1); } } return 0; }