#include<bits/stdc++.h>
using namespace std;
const int N=200005;
vector<int> q[N];
vector<int> e[N];
int n,m;
char cc[16];
inline void deal1(int num,int pos){
int dl=-1;
for(int i=q[pos].size()-1;i>=0;--i){
if(num<q[pos][i]){
if(num==0) printf("%d\n",e[pos][i+1]);
else printf("%d\n",e[pos][i]);
dl=i;
break;
}
num-=q[pos][i];
}
if(dl==-1){
q[pos].clear();
printf("%d\n",e[pos][0]);
e[pos].clear();
return;
}
q[pos].erase(q[pos].begin()+dl+1,q[pos].end());
e[pos].erase(e[pos].begin()+dl+1,e[pos].end());
q[pos][dl]-=num;
}
inline void deal2(int p1,int p2){
if(q[p1].size()==0) return;
if(q[p2].size()>0){
if(e[p1][e[p1].size()-1]==e[p2][e[p2].size()-1]) q[p2][q[p2].size()-1]+=q[p1][q[p1].size()-1];
else{
q[p2].push_back(q[p1][q[p1].size()-1]);
e[p2].push_back(e[p1][e[p1].size()-1]);
}
for(int i=q[p1].size()-2;i>=0;--i){
q[p2].push_back(q[p1][i]);
e[p2].push_back(e[p1][i]);
}
}
else{
for(int i=q[p1].size()-1;i>=0;--i){
q[p2].push_back(q[p1][i]);
e[p2].push_back(e[p1][i]);
}
}
q[p1].clear();
e[p1].clear();
}
int main(){
int x,y,z;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i){
scanf("%s%d%d",(cc+1),&x,&y);
if(cc[3]=='s'){
scanf("%d",&z);
q[z].push_back(x);
e[z].push_back(y);
}
else if(cc[3]=='p'){
deal1(x,y);
}
else{
deal2(x,y);
}
}
return 0;
}