#include using namespace std; typedef signed long long ll; #define _P(...) (void)printf(__VA_ARGS__) #define FOR(x,to) for(x=0;x<(to);x++) #define FORR(x,arr) for(auto& x:arr) #define FORR2(x,y,arr) for(auto& [x,y]:arr) #define ALL(a) (a.begin()),(a.end()) #define ZERO(a) memset(a,0,sizeof(a)) #define MINUS(a) memset(a,0xff,sizeof(a)) template bool chmax(T &a, const T &b) { if(a bool chmin(T &a, const T &b) { if(a>b){a=b;return 1;}return 0;} //------------------------------------------------------- int N,Q; ll A[303030]; int X[303030],Y[303030]; ll Z[303030]; template class BIT { public: V bit[1<=0;i--) if(tv+bit[ent+(1< num,val; set U; void solve() { int i,j,k,l,r,x,y; string s; vector Vs; cin>>N>>Q; FOR(i,N) { cin>>A[i]; Vs.push_back(A[i]); U.insert(i); } FOR(i,Q) { cin>>X[i]; if(X[i]==1) { cin>>Y[i]>>Z[i]; Y[i]--; Vs.push_back(Z[i]); } else if(X[i]==3) { cin>>Y[i]; Y[i]--; } } sort(ALL(Vs)); Vs.erase(unique(ALL(Vs)),Vs.end()); FOR(i,N) { A[i]=lower_bound(ALL(Vs),A[i])-Vs.begin(); } FOR(i,Q) { if(X[i]==1) { x=Y[i]; if(U.count(x)==0) { x=num(x); y=val.lower_bound(x); num.add(x,-1); val.add(y,-1); U.insert(x); } A[x]=lower_bound(ALL(Vs),Z[i])-Vs.begin(); } else if(X[i]==2) { FORR(x,U) { num.add(x,1); val.add(A[x],1); } U.clear(); } else { x=Y[i]; if(U.count(x)) { cout<