const int MAXN=1e5+5,MAXM=60;
struct Node{
int ch[2],cnt;
}node[MAXN*MAXM];
int root[MAXN],node_cnt;
void push_up(int k){node[k].cnt=node[node[k].ch[0]].cnt+node[node[k].ch[1]].cnt;}
void update(int &k,int lef,int rig,int pos){
k=++node_cnt;
node[k].cnt++;
if(lef==rig)return;
int mid=lef+rig>>1;
if(mid>=pos)
update(node[k].ch[0],lef,mid,pos);
else
update(node[k].ch[1],mid+1,rig,pos);
}
int query(int k,int lef,int rig){
int mid=lef+rig>>1;
if(lef==rig)return mid;
if(node[k].ch[0])
return query(node[k].ch[0],lef,mid);
else
return query(node[k].ch[1],mid+1,rig);
}
void Merge(int &k1,int k2,int lef,int rig){
if(!k1||!k2) return k1|=k2,void();
if(lef==rig) return node[k1].cnt+=node[k2].cnt,void();
int mid=lef+rig>>1;
Merge(node[k1].ch[0],node[k2].ch[0],lef,mid);
Merge(node[k1].ch[1],node[k2].ch[1],mid+1,rig);
push_up(k1);
}
void split(int &k1,int &k2,int k){
if(node[k1].cnt==k)return;
k2=++node_cnt;
if(k<=node[node[k1].ch[0]].cnt){
node[k2].ch[1]=node[k1].ch[1];
node[k1].ch[1]=0;
split(node[k1].ch[0],node[k2].ch[0],k);
}
else
split(node[k1].ch[1],node[k2].ch[1],k-node[node[k1].ch[0]].cnt);
push_up(k1);push_up(k2);
}
struct seg{
int lef,rig,rev;
bool operator < (const seg &b)const{
return lef<b.lef;
}
seg(int lef,int rig,int rev):lef(lef),rig(rig),rev(rev){}
seg(int pos){lef=pos;}
};
set<seg> s;
typedef set<seg>::iterator iter;
iter split2(int pos){
iter it=s.lower_bound(seg(pos));
if(it!=s.end()&&it->lef==pos)return it;
--it;
int lef=it->lef,rig=it->rig,rev=it->rev;
if(rev){
split(root[lef],root[pos],rig-pos+1);
swap(root[lef],root[pos]);
}
else
split(root[lef],root[pos],pos-lef);
s.erase(it);s.insert(seg(lef,pos-1,rev));
return s.insert(seg(pos,rig,rev)).first;
}
int main()
{
int n=read_int(),m=read_int();
_rep(i,1,n)update(root[i],1,n,read_int()),s.insert(seg(i,i,0));
while(m--){
int opt=read_int(),lef=read_int(),rig=read_int();
iter r=split2(rig+1),l=split2(lef);
for(iter it=++l;it!=r;++it)Merge(root[lef],root[it->lef],1,n);
s.erase(--l,r);
s.insert(seg(lef,rig,opt));
}
int p=read_int();
split2(p+1);split2(p);
enter(query(root[p],1,n));
return 0;
}