#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
int seq = 0;
int degrees[n + 1];
vector<int> waits;
for (int i = 0; i < n; i++) {
int op;
cin >> op;
switch (op) {
case 1: {
seq++;
int x;
cin >> x;
degrees[seq] = x;
if (waits.size() < m) {
waits.push_back(seq);
cout << seq << endl;
} else cout << "ERR\n";
break;
}
case 2: {
seq++;
int a, b;
cin >> a >> b;
degrees[seq] = a;
auto it = find(waits.begin(), waits.end(), b);
if (it != waits.end() && waits.size() < m) {
waits.insert(it, seq);
cout << seq << endl;
} else cout << "ERR\n";
break;
}
case 3: {
if (waits.empty()) cout << "ERR\n";
else {
cout << waits[0] << endl;
waits.erase(waits.begin());
}
break;
}
case 4: {
if (waits.empty()) cout << "ERR\n";
else {
auto index = waits.begin();
for (auto it = waits.begin(); it != waits.end(); it++) {
if (degrees[*it] > degrees[*index]) index = it;
}
cout << *index << endl;
waits.erase(index);
}
}
}
}
return 0;
}