/**
  Spring training session
  Task 3: stones.cpp
  Vasil Yasenov Sarafov
**/

#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
#define pause system("pause");
using namespace std;

typedef unsigned long long Int;

struct my
{
    int y;
    Int t;
    my () {};
    my (int _y, Int _t)
    {
        y = _y;
        t = _t;
    }

}tmp;

int n, m;
int code, c, w;
deque <Int> pq[1<<18];
vector <my> v;

void solve();
bool cmp (my first, my second);
bool Compare (Int first, Int second);

int main(void)
{
    scanf("%i %i", &n, &m);
    for(int i = 1; i <= n; i++)
    {
        scanf("%i", &code);
        if(code == 1)
        {
            scanf("%i %i", &c, &w);
            pq[c].push_back(w);
        }
        else if(code == 2)
        {
            solve();
        }
    }
    return 0;
}

void solve()
{

    for(int i = 1; i <= m; i++)
    {
        sort(pq[i].begin(), pq[i].end(), Compare);
    }
    for(int i = 1; i <= m; i++)
    {
        tmp = my (i, pq[i][0]);
        v.push_back(tmp);
    }

    sort(v.begin(), v.end(), cmp);
    pq[v[0].y].pop_front();
    printf("%i\n", v[0].t);
    /*for(int i = 1; i <= m; i++)
    {
        for(int j = 0; j < pq[i].size(); j++)
        {
            cout << pq[i][j]<< " ";
        }
        cout << endl;
    }*/
    v.clear();
    return;
}

bool cmp(my first, my second)
{
    return (first.t > second.t);
}

bool Compare(Int first, Int second)
{
    return (first < second);
}
/**
9 2
1 1 9
1 2 3
1 1 4
2
1 1 2
1 2 5
2
2
1 2 1
**/
