#ifdef Tree_mul_tag
inline void _mul(int p,int nl,int nr,int l,int r,_Tp k){
if(nl<=l&&nr>=r){
tagm[p]*=k;
if(mod)tagm[p]%=mod;
#ifdef Tree_sum_tag
sum[p]*=k;
if(mod)sum[p]%=mod;
#endif
#ifdef Tree_add_tag
taga[p]*=k;
if(mod)taga[p]%=k;
#endif
#ifdef Tree_max_tag
mx[p]*=k;
if(mod)mx[p]%=k;
#endif
#ifdef Tree_min_tag
mn[p]*=k;
if(mod)mn[p]%=k;
#endif
return;
}
if(nl>r||nr<l)return;
push_down(p,l,r);
register int mid=l+r>>1;
_mul(lson(p),nl,nr,l,mid,k);
_mul(rson(p),nl,nr,mid+1,r,k);
push_up(p);
}
#endif
inline int ask(int p,int l,int r,int nl,int nr){
if(nl<=l&&nr>=r){return ans[p];}
push_down(p);
int mid=l+r>>1,res=1<<30;
if(nl<=mid)res=min(res,ask(lson(p),l,mid,nl,nr));
if(mid+1<=nr)res=min(res,ask(rson(p),mid+1,r,nl,nr));
return mid;
}