/*
 *
 *  Brojanje, okruzno 2008/09
 *
 *  Autor : Rajko Nenadov (rajkon@gmail.com)
 *
 */

#include <cstdlib>
#include <cstdio>
#include <iostream>
using namespace std;

struct List
{
	long broj;
	long pojavljivanje;

	List *next;
};

// glava liste u kojoj cuvamo izgovorene brojeve
List *glava;

long N;

/*
 * 	ukoliko se 'broj' nalazi u list, polje 'pojavljivanje' elementa u kom se nalazi povecamo za 1;
 *  inace dodajemo novi element u listu, ali tako da lista ostane sortirana po 'broj' polju.
 */
void ubaci(long broj)
{
	if (glava == NULL)
	{
		glava = (List*)malloc(sizeof(List));
		glava->broj = broj;
		glava->pojavljivanje = 1;
		glava->next = NULL;
	}
	else
	{
		List *prev = NULL;
		List *itr = glava;

		while (itr != NULL && (itr->broj < broj))
		{
			prev = itr;
			itr = itr->next;
		}

		if (itr != NULL && (itr->broj == broj))
		{
			// broj postoji u listi
			itr->pojavljivanje++;
		}
		else
		{
			List *novi = (List*)malloc(sizeof(List));
			novi->broj = broj;
			novi->pojavljivanje = 1;

			if (prev == NULL)
			{
				// dodajemo na pocetak liste
				novi->next = glava;
				glava = novi;
			}
			else
			{
				prev->next = novi;
				novi->next = itr;
			}
		}
	}
}


long nadji(long k)
{
	List *itr = glava;
	while (itr->pojavljivanje < k)
	{
		k -= itr->pojavljivanje;
		itr = itr->next;
	}

	return itr->broj;
}


int main()
{
  long long l1 = clock();
	FILE *fin = fopen("brojanje.01.in", "r");
	FILE *fout = fopen("brojanjer.01.out", "w");

	glava = NULL;

	fscanf(fin, "%ld", &N);
	for (long i = 0; i < N; i++)
	{
		long a, b;
		fscanf(fin, "%d %ld", &a, &b);

		if (a == 1)
			ubaci(b);
		else
			fprintf(fout, "%ld\n", nadji(b));
	}

	fclose(fin);
	fclose(fout);
  cout << clock() - l1 << endl;
  system("pause");
	return 0;
}
