#include #include #include #include using namespace std; using lint=int64_t; constexpr int INF=1e9; class SegmentTree { private: public: int N; vector tree; public: SegmentTree(vector& src) { int size=src.size(); N=1; while(N0) { i=(i-1)/2; tree[i]=min(tree[2*i+1],tree[2*i+2]); } } int getMin(int tl,int tr,int l=0,int r=-1,int i=0) { if(r<0) r=N; if(tr<=l || r<=tl) return INF; if(tl<=l && r<=tr) return tree[i]; int retl=getMin(tl,tr,l,(l+r)/2,2*i+1); int retr=getMin(tl,tr,(l+r)/2,r,2*i+2); return min(retl,retr); } int getv(int i) { return tree[i+N-1]; } }; int main() { int N,Q; vector a; map index; cin >> N >> Q; for(int i=0;i> in; a.push_back(in); index[in]=i; } SegmentTree seg(a); for(int i=0;i> o >> l >> r; if(o==1) { int vl=seg.getv(l-1); int vr=seg.getv(r-1); seg.update(l-1,vr); seg.update(r-1,vl); index[vl]=r-1; index[vr]=l-1; } if(o==2) { cout << index[seg.getMin(l-1,r)]+1 << endl; } } return 0; }