#include #include #include using namespace std; struct dat{ int mx; long lft,rgt; }; dat op(dat a,dat b) { if(a.mx==-1)return b; if(b.mx==-1)return a; if(a.mx==-2)return(dat){-2,0L,0L}; if(b.mx==-2)return(dat){-2,0L,0L}; long l=a.rgt,r=b.lft; l|=1L<kk&&r==kk) { l|=kk; r=0; break; } return(dat){-2,0L,0L}; } l^=k; r^=k; k<<=1; if(!(l&k))l|=k; else if(!(r&k))r|=k; else return(dat){-2,0L,0L}; } assert(l||r); dat ret; ret.lft=a.lft; ret.rgt=b.rgt; if(l) { int k=0; while(l>>k+1)k++; ret.mx=k; ret.rgt|=l^(1L<>k+1)k++; ret.mx=k; ret.lft|=r^(1L<mk(int a) { int k=0; while(a%2==0)a/=2,k++; return make_pair(a,k); } pairop_minmax(pairl,pairr) { l.first=max(l.first,r.first); l.second=min(l.second,r.second); return l; } paire_minmax(){return make_pair(-(int)1e9,(int)1e9);} int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N,Q;cin>>N>>Q; vector >init_minmax(N); vectorinit(N); for(int i=0;i>A; auto[a,k]=mk(A); init[i]=(dat){k,0L,0L}; init_minmax[i]=make_pair(a,a); } atcoder::segtreeseg(init); atcoder::segtree,op_minmax,e_minmax>seg_minmax(init_minmax); for(;Q--;) { int t;cin>>t; if(t==1) { int i,x;cin>>i>>x;i--; auto[a,k]=mk(x); seg.set(i,(dat){k,0L,0L}); seg_minmax.set(i,make_pair(a,a)); } else { int l,r;cin>>l>>r;l--; auto p=seg_minmax.prod(l,r); if(p.first!=p.second)cout<<"No\n"; else { dat t=seg.prod(l,r); cout<<(t.mx==-2||t.lft||t.rgt?"No\n":"Yes\n"); } } } }