#include <iostream>
using namespace std;
#define mid ((l+r)>>1)
#define Mid ((s+t)>>1)
const int NR=2e5+5;
int n,q,l[NR],r[NR],op[NR],a[NR],ax[NR],g[NR],K,x,bb[NR];
int T[NR<<2],b[NR<<2];
void build(int p,int l,int r,int k)
{
if(l==r) {if(k==0) T[p]=a[l]>=x; else T[p]=a[l]<=x; b[p]=-1; return;}
build(p<<1,l,mid,k); build(p<<1|1,mid+1,r,k); T[p]=T[p<<1]+T[p<<1|1]; b[p]=-1;
}
void pushdown(int p,int l,int r)
{
T[p<<1]=b[p]*(mid-l+1); T[p<<1|1]=b[p]*(r-mid); b[p<<1]=b[p<<1|1]=b[p]; b[p]=-1;
}
void update(int l,int r,int s,int t,int p,int g)
{
if(l<=s&&t<=r) { T[p]=g*(t-s+1); b[p]=g;return; }
if(b[p]!=-1) pushdown(p,s,t);
if(l<=Mid)update(l,r,s,Mid,p<<1,g); if(r>Mid)update(l,r,Mid+1,t,p<<1|1,g); T[p]=T[p<<1]+T[p<<1|1];
}
int query(int l,int r,int s,int t,int p)
{
if(l<=s&&t<=r)
{
return T[p];
}
if(b[p]!=-1) pushdown(p,s,t);
int ret=0; if(l<=Mid) ret+=query(l,r,s,Mid,p<<1); if(r>Mid) ret+=query(l,r,Mid+1,t,p<<1|1);
return ret;
}
int main()
{
cin>>n>>q>>x;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
x=a[x];
for(int i=1;i<=q;i++)
{
cin>>op[i]>>l[i]>>r[i]; op[i]--;
}
for(int round=0;round<2;round++)
{
build(1,1,n,round);
for(int i=1;i<=q;i++)
{
int cnt1=query(l[i],r[i],1,n,1);
if(op[i]==0&&round==0)
{
if(cnt1) update(r[i]-cnt1+1,r[i],1,n,1,1);
if(cnt1<r[i]-l[i]+1) update(l[i],r[i]-cnt1,1,n,1,0);
}
if(op[i]==1&&round==0)
{
if(cnt1) update(l[i],l[i]+cnt1-1,1,n,1,1);
if(cnt1<r[i]-l[i]+1) update(l[i]+cnt1,r[i],1,n,1,0);
}
if(op[i]==0&&round==1)
{
if(cnt1) update(l[i],l[i]+cnt1-1,1,n,1,1);
if(cnt1<r[i]-l[i]+1) update(l[i]+cnt1,r[i],1,n,1,0);
}
if(op[i]==1&&round==1)
{
if(cnt1) update(r[i]-cnt1+1,r[i],1,n,1,1);
if(cnt1<r[i]-l[i]+1) update(l[i],r[i]-cnt1,1,n,1,0);
}
}
for(int i=1;i<=n;i++)
{
if(query(i,i,1,n,1)==1)
bb[i]++;
}
}
for(int i=1;i<=n;i++) if(bb[i]==2)
{
cout<<i; break;
}
return 0;
}
/*
*/