#include<bits/stdc++.h>
#define int long long
#define mid ((l+r)>>1)
#define ls (x<<1)
#define rs (x<<1|1)
#define Lson ls,l,mid
#define Rson rs,mid+1,r
using namespace std;
const int maxn = 2e5 + 7;
inline int read()
{
int x = 0, f = 1 ; char c = getchar();
while(c < '0' || c > '9' ) { if( c == '-') f = -1 ; c = getchar() ; }
while( c >= '0' && c <= '9' ) { x = x * 10 + c - '0' ; c = getchar() ; }
return x * f;
}
int n,m;
int q;
int Ans;
int L[maxn],R[maxn],op[maxn];
struct tree{
int Mark,Sum;
}Tree[maxn<<3];
int data[maxn],a[maxn];
void pulss(int x,int l,int r,int k)
{
Tree[x].Sum = (r - l + 1) * k;
Tree[x].Mark = k;
}
void push(int x,int l,int r)
{
if(Tree[x].Mark != -1)
{
pulss(Lson,Tree[x].Mark); pulss(Rson,Tree[x].Mark);
Tree[x].Mark = -1;
}
}
void Build(int x,int l,int r)
{
Tree[x].Mark = -1;
if(l == r)
{
Tree[x].Sum = data[l];
return ;
}
Build(Lson); Build(Rson);
Tree[x].Sum = Tree[ls].Sum + Tree[rs].Sum;
return ;
}
void Change(int x,int l,int r,int L,int R,int k)
{
if(L <= l && r <= R)
{
pulss(x,l,r,k);
return ;
}
push(x,l,r);
if(L <= mid) Change(Lson,L,R,k);
if(R > mid) Change(Rson,L,R,k);
Tree[x].Sum = Tree[ls].Sum + Tree[rs].Sum;
return ;
}
int Query(int x,int l,int r,int L,int R)
{
int ans = 0;
if(L <= l && r <= R) return Tree[x].Sum;
push(x,l,r);
if(L <= mid) ans += Query(Lson,L,R);
if(R > mid) ans += Query(Rson,L,R);
return ans;
}
bool ok(int x)
{
for(int i = 1; i <= n; ++i) data[i] = (a[i] >= x);
memset(Tree,0,sizeof Tree);
Build(1,1,n);
for(int i = 1; i <= m; ++i)
{
int cnt = Query(1,1,n,L[i],R[i]);
if(op[i])
{
Change(1,1,n,L[i],L[i] + cnt - 1, 1);
Change(1,1,n,L[i] + cnt,R[i], 0);
}
else
{
Change(1,1,n,R[i] - cnt + 1,R[i], 1);
Change(1,1,n,L[i],R[i] - cnt, 0);
}
}
return Query(1,1,n,q,q);
}
signed main()
{
n = read(); m = read();
for(int i = 1; i <= n; ++i) a[i] = read();
for(int i = 1; i <= m; ++i)
{
op[i] = read(),L[i] = read(),R[i] = read();
if(L[i] > R[i]) swap(L[i],R[i]);
}
q = read();
int l = 1, r = n + 1;
while(l < r - 1)
{
int M = ((l + r) >> 1);
if(ok(M)) Ans = M,l = M;
else r = M;
}
printf("%lld\n",Ans);
return 0;
}