#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;
}