#include #include #include #include #include #include #include #include #include using namespace std; #define rep(i,a,n) for (int i=a;i=a;i--) #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define SZ(x) ((int)(x).size()) #define fi first #define se second typedef vector VI; typedef long long ll; typedef pair PII; const ll mod=1000000007; ll powmod(ll a,ll b) {ll res=1;a%=mod;for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;} // head const int N=401000; int fg[N],sz[N],s[N],x[N],a[N]; int n,m,_,k,opt[N],l[N],r[N]; void build(int p,int l,int r) { fg[p]=-1; sz[p]=r-l+1; if (l==r) { s[p]=x[l]; } else { int md=(l+r)>>1; build(p+p,l,md); build(p+p+1,md+1,r); s[p]=s[p+p]+s[p+p+1]; } } void setp(int p,int v) { fg[p]=v; if (v) s[p]=sz[p]; else s[p]=0; } void push(int p) { if (fg[p]!=-1) { setp(p+p,fg[p]); setp(p+p+1,fg[p]); fg[p]=-1; } } int query(int p,int l,int r,int tl,int tr) { if (tl==l&&tr==r) return s[p]; else { push(p); int md=(l+r)>>1; if (tr<=md) return query(p+p,l,md,tl,tr); else if (tl>md) return query(p+p+1,md+1,r,tl,tr); else return query(p+p,l,md,tl,md)+query(p+p+1,md+1,r,md+1,tr); } } void modify(int p,int l,int r,int tl,int tr,int v) { if (tl>tr) return; if (tl==l&&tr==r) return setp(p,v); else { push(p); int md=(l+r)>>1; if (tr<=md) modify(p+p,l,md,tl,tr,v); else if (tl>md) modify(p+p+1,md+1,r,tl,tr,v); else modify(p+p,l,md,tl,md,v),modify(p+p+1,md+1,r,md+1,tr,v); s[p]=s[p+p]+s[p+p+1]; } } bool check(int md) { rep(i,1,n+1) x[i]=a[i]>=md; build(1,1,n); // rep(i,1,n+1) printf("%d ",x[i]); puts(""); rep(i,0,m) { int s=query(1,1,n,l[i],r[i]); // printf("%d\n",s); if (opt[i]==0) modify(1,1,n,r[i]-s+1,r[i],1),modify(1,1,n,l[i],r[i]-s,0); else modify(1,1,n,l[i],l[i]+s-1,1),modify(1,1,n,l[i]+s,r[i],0); } return query(1,1,n,k,k); } void gao() { scanf("%d%d",&n,&m); rep(i,1,n+1) scanf("%d",a+i); rep(i,0,m) { scanf("%d%d%d",opt+i,l+i,r+i); } int l=1,r=n+1; scanf("%d",&k); check(5); while (l+1>1; if (check(md)) l=md; else r=md; } printf("%d\n",l); } int main() { for (scanf("%d",&_);_;_--) gao(); }