#include <bits/stdc++.h>
#include <deque>
using namespace std;
#define rep(i,n) for (int i = 0; i < (n); i++)
#define repd(i,a,b) for (int i = (a); i < (b); i++)
typedef long long ll;
int main(void)
{
	int n, q, query, t, x;
	cin >> n >> q;
	vector<priority_queue<int> > Q(n);
	
	rep(i, q)
	{
		cin >> query >> t;
		if (query == 0)
		{
			cin >> x;
			Q[t].push(x);
		}
		else if (query == 1)
		{
		    if (!Q[t].empty())
		    {
			    cout << Q[t].top() << endl;
		    }
		}
		else
		{
		    if (!Q[t].empty())
			{
			    Q[t].pop();
			}
		}
	}
}
