#include <bits/stdc++.h>
using namespace std;
int a[8000005],b[8000005];
int x[8000005],y[8000005],z[8000005];
int trues[8000005],tree[8000005],vis[8000005];
int n,m,q;
void chuli(int k,int mid,int L,int R){
if(R<L){
return;
}
if(vis[k]!=0){
if(vis[2*k]!=0){
chuli(2*k,(L+mid)/2,L,mid);
}
if(vis[2*k+1]!=0){
chuli(2*k+1,(mid+1+R)/2,mid+1,R);
}
vis[2*k] = vis[k];
vis[2*k+1] = vis[k];
if(vis[k]==-1){
tree[2*k] = 0;
tree[2*k+1] = 0;
}else{
tree[2*k] = (mid - L + 1) * vis[k];
tree[2*k+1] = (R - mid) * vis[k];
}
}
vis[k] = 0;
}
void dfs(int k,int left,int right){
if(right<left){
return;
}
if(left==right){
trues[k]=b[left];
return;
}
int mid=(left+right)/2;
dfs(k*2,left,mid);
dfs(k*2+1,mid+1,right);
trues[k]=trues[k*2]+trues[k*2+1];
return;
}
void dfss(int k,int left,int right){
if(right<left){
return;
}
if(left==right){
tree[k]=b[left];
return;
}
int mid=(left+right)/2;
dfss(k*2,left,mid);
dfss(k*2+1,mid+1,right);
tree[k]=tree[k*2]+tree[k*2+1];
return;
}
void dfs2(int k,int TT,int GG,int L,int R){
if(R<L){
return;
}
if(L > GG){
return;
}
if(TT > R){
return;
}
if(TT <= L && R <= GG){
vis[k]=1;
tree[k] = (R - L + 1) *1;
return;
}
int mid=(L+R)/2;
chuli(k,mid,L,R);
dfs2(k*2, TT, GG, L, mid);
dfs2(k*2+1, TT, GG, mid+1, R);
}
void dfs3(int k,int TT,int GG,int L,int R){
if(R<L){
return;
}
if(L > GG){
return;
}
if(TT > R){
return;
}
if(TT <= L && R <= GG){
vis[k]=-1;
tree[k] = 0;
return;
}
int mid=(L+R)/2;
chuli(k,mid,L,R);
dfs3(k*2, TT, GG, L, mid);
dfs3(k*2+1, TT, GG, mid+1, R);
}
int dfs4(int k,int TT,int GG,int L,int R){
if(R<L){
return 0;
}
if(L > GG){
return 0;
}
if(TT > R){
return 0;
}
if(TT <= L && R <= GG){
return tree[k];
}
int mid=(L+R)/2;
chuli(k,mid,L,R);
int value = dfs4(k*2, TT, GG, L, mid);
value += dfs4(k*2+1, TT, GG, mid+1, R);
return value;
}
int check(int mid){
memset(trues,0,sizeof(trues));
memset(tree,0,sizeof(tree));
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++){
if(a[i]<mid){
b[i]=0;
}else b[i]=1;
}
dfs(1,1,n);
dfss(1,1,n);
for(int i=1;i<=m;i++){
if(x[i]==1){
int j=dfs4(1,y[i],z[i],1,n);
dfs2(1,y[i],y[i]+j-1,1,n);
dfs3(1,y[i]+j,z[i],1,n);
}else{
int j=dfs4(1,y[i],z[i],1,n);
dfs2(1,z[i]-j+1,z[i],1,n);
dfs3(1,y[i],z[i]-j,1,n);
}
}
if(dfs4(1,q,q,1,n)!=1){
return 0;
}else{
return 1;
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>x[i]>>y[i]>>z[i];
}
cin>>q;
int l=1,r=n,mid=0,ans=0;
while(l<=r){
mid=(l+r)/2;
if(check(mid)){
ans=mid;
l=mid+1;
}else{
r=mid-1;
}
}
cout<<ans;
return 0;
}