/*
TASK: bands
LANG: C++
*/

#include <stdio.h>
#include <memory.h>

#define min(a,b) ((a)<(b) ? (a):(b))
#define max(a,b) ((a)>(b) ? (a):(b))

const int MAX = 1<<3; //1<<15

int n, m;
int IT[2*MAX];
int ans;

void insert (int a, int b, int c, int index=1, int lo=0, int up=MAX)
{
	if (a==lo && b==up) {
		IT[index] = c;
		return;
	}

	int mid = (lo+up)>>1;
	if (a < mid) insert (a,min(b,mid),c,index*2,lo,mid);
	if (b > mid) insert (max(a,mid),b,c,index*2+1,mid,up);
}

void solve2 ()
{

}

void output (int a, int index=1, int lo=0, int up=MAX)
{
	if (IT[index] != -1) ans = IT[index];
	if (lo == up-1) return;

	int mid = (lo+up)>>1;
	if (a < mid) output (a,index*2,lo,mid);
	else output (a,index*2+1,mid,up);
}

int main ()
{
	freopen ("bands.in", "r", stdin);
	
	int i, p;
	int a, b, c;

	scanf ("%d%d", &n, &m);

	memset (IT,-1,sizeof(IT));
	insert (0,n,0);

	for (i=0; i<m; i++) {
		scanf ("%d", &p);

		switch (p) {
		case 1:
			scanf ("%d%d%d", &a, &b, &c);
			insert (a,b,c);
			break;

		case 2: 
			solve2 ();
			break;

		case 3:
			scanf ("%d", &a);
			output (a);
			printf ("%d\n", ans);
			break;
		}
	}

	return 0;
}