#include #include #include #include #define rep(i,a,b) for(int i=(a);i<(b);i++) #define rrep(i,a,b) for(int i=(b)-1;i>=(a);i--) using namespace std; using namespace atcoder; using namespace __gnu_pbds; using ll=long long; using ld=long double; using vll=vector; using vvll=vector; using pll=pair; // using mint=modint; // template // using ordered_map=tree,rb_tree_tag,tree_order_statistics_node_update>; pll op(pll a,pll b){ return min(a,b); } pll e(){ return {LLONG_MAX,LLONG_MAX}; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll N,Q; cin>>N>>Q; vll a(N); vectorv(N); rep(i,0,N){ cin>>a[i]; v[i]={a[i],i}; } segtreeseg(v); while(Q--){ ll q,l,r; cin>>q>>l>>r; --l,--r; if(q==1){ swap(a[l],a[r]); seg.set(l,{a[l],l}); seg.set(r,{a[r],r}); }else{ auto [x,y]=seg.prod(l,r+1); cout<