#include<bits/stdc++.h>
using namespace std;
#define fxl_is_rk1 0
#define lp p << 1
#define rp p << 1 | 1
int a[110000],cz[110000];
int mid;
int n,m,q;
struct node
{
int l,r,sum,add;
}T[110000];
struct ak
{
int ask,l,r;
}que[110000];
bool cmp(int b,int c)
{
return b<c;
}
bool cmpp(int b,int c)
{
return b>c;
}
void build(int p,int x,int y)
{
T[p].l=x,T[p].r=y;
T[p].add=-1;
if(x==y)
{
//cout<<" p="<<p<<" ";
T[p].sum=cz[x];
//cout<<cz[x]<<" "<<T[x].sum;
return ;
}
int midd=(x+y)/2;
//cout<<midd<<endl;
build(p*2,x,midd);
build(p*2+1,midd+1,y);
T[p].sum=T[p*2].sum+T[p*2+1].sum;
}
void spread(int p)
{
if(T[p].add!=-1)
{
T[lp].add=T[p].add;
T[rp].add=T[p].add;
T[lp].sum=(T[p].add)*(T[lp].r-T[lp].l+1);
T[rp].sum=(T[p].add)*(T[rp].r-T[rp].l+1);
T[p].add=-1;
}
}
void change(int p,int l,int r,int k)
{
if(r<=T[p].l||l>=T[p].r)
return;
if(T[p].l>=l&&T[p].r<=r)
{
T[p].sum=k*(T[p].r-T[p].l+1);
T[p].add=k;
return ;
}
spread(p);
int mid=(T[p].l+T[p].r)/2;
if(l<=mid) change(p*2,l,r,k);
if(r>mid) change(p*2+1,l,r,k);
T[p].sum=T[p*2].sum+T[p*2+1].sum;
}
int ask(int p,int l,int r)
{
if(T[p].l>=l&&T[p].r<=r)
{
return T[p].sum;
}
spread(p);
int val=0;
int midd=(T[p].l+T[p].r)>>1;
if(l<=midd)
{
val+=ask(lp,l,r);
}
if(r>midd)
{
val+=ask(rp,l,r);
}
return val;
}
bool check(int r)
{
for(int i=1;i<=n;i++)
{
//cout<<"mid="<<mid<<endl;
if(a[i]<mid) cz[i]=0;
else cz[i]=1;
}
build(1,1,n);
for(int i=1;i<=n;i++)
{
cout<<ask(1,i,i)<<" ";
} cout<<endl;
for(int i=1;i<=m;i++)
{
int ch=ask(1,que[i].l,que[i].r);
if(que[i].ask==0)
change(1,que[i].l,que[i].r-ch,0);
change(1,que[i].r-ch+1,que[i].r,1);
if(que[i].ask==1)
change(1,que[i].l,que[i].l+ch-1,1);
change(1,que[i].l+ch,que[i].r,0);
}
//cout<<"ask= "<<ask(1,q,q)<<endl;
return ask(1,q,q);
}
int main()
{
//freopen("seq.in","r",stdin);
//freopen("seq.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
//cz[i]=a[i];
}
for(int i=1;i<=m;i++)
{
cin>>que[i].ask>>que[i].l>>que[i].r;
}
cin>>q;
int l=0,r=n;
int ans;
while(l<=r)
{
// memset(T,0,sizeof(T));
mid=(l+r)/2;
if(check(mid))
{
l=mid+1;
ans=mid;
}
else r=mid-1;
}
// mid=2;
// cout<<check(2)<<" "<<endl;
// cout<<r<<endl;
// mid=2;
// if(check(2));
// for(int i=1;i<=n;i++)
// {
// cout<<cz[i]<<" ";
// }
//mid=r;
//if(check(r)) ans=r;
//mid=5;
//if(check(5))ans=5;
cout<<ans;
fclose(stdin);
fclose(stdout);
return fxl_is_rk1;
}