#include<bits/stdc++.h>
using namespace std;
int n,m,k,a[100001],c[100001],q[100001];
int op[100001],l[100001],r[100001],tot,ans;
int f[800001],b[800001];
int bu(int a,int l,int r){
if(l==r){
f[a]=c[l];
return 0;
}
int x=(l+r)/2;
bu(2*a,l,x);
bu(2*a+1,x+1,r);
f[a]=f[a*2]+f[a*2+1];
b[a]=-1;
return 0;
}
int pt(int a,int l,int r){
int mi=(l+r)/2;
if(b[a]==-1)return 0;
b[a*2]=b[a];
b[a*2+1]=b[a];
f[a*2]=b[a]*(mi-l+1);
f[a*2+1]=b[a]*(r-mi);
b[a]=-1;
return 0;
}
long long qu(long long a,long long l,long long r,long long ql,long long qr){
if(ql<=l&&qr>=r){
return f[a];
}
pt(a,l,r);
long long mi=(l+r)/2;
if(qr<=mi)return qu(a*2,l,mi,ql,qr);
else if(ql>mi)return qu(2*a+1,mi+1,r,ql,qr);
else{
long long ans1,ans2;
ans1=qu(2*a,l,mi,ql,mi);
ans2=qu(2*a+1,mi+1,r,mi+1,qr);
return ans1+ans2;
}
}
int ad(int a,int l,int r,int ql,int qr,int x){
if(qr<ql)return 0;
if(ql<=l&&qr>=r){
b[a]=x;
f[a]=(r-l+1)*x;
return f[a];
}
pt(a,l,r);
int mi=(l+r)/2;
if(qr<=mi)ad(a*2,l,mi,ql,qr,x);
else if(ql>mi)ad(2*a+1,mi+1,r,ql,qr,x);
else{
ad(2*a,l,mi,ql,mi,x);
ad(2*a+1,mi+1,r,mi+1,qr,x);
}
f[a]=f[a*2]+f[a*2+1];
return 0;
}
int ck(int x){
for(int i = 1;i<=n;i++){
c[i]=(a[i]>=x);
}
memset(b,-1,sizeof(b));
bu(1,1,n);
for(int i = 1;i<=m;i++){
int d=qu(1,1,n,l[i],r[i]);
if(op[i]==0){
ad(1,1,n,l[i],r[i]-d,0);
ad(1,1,n,r[i]-d+1,r[i],1);
}
else{
ad(1,1,n,l[i],r[i]-d,1);
ad(1,1,n,r[i]-d+1,r[i],0);
}
}
return qu(1,1,n,k,k);
}
int main(){
cin>>n>>m;
for(int i = 1;i<=n;i++){
cin>>a[i];
}
for(int i = 1 ;i<=m;i++){
cin>>op[i]>>l[i]>>r[i];
}
cin>>k;
int l = 1,r=n+1;
while(l<=r){
int mi=(l+r)/2;
if(ck(mi))r=mi-1,ans=mi;
else l=mi+1;
}
cout<<ans;
return 0;
}