/*
TASK:bands
LANG:C++
*/
#include<stdio.h>

using namespace std;

void query(int left, int right, int a, int ind);
void add(int a, int b, int left, int right, int ind, int color);
void find_color(int a);
void add_band(int a, int b, int c);
void input();
void solve();
void init();



int N, M;
int tree[131072];


int main()
{
input();
init();
solve();

return 0;
}


void init()
{
int i;
for(i = 0; i < 100000; i++) tree[i] = 0;


i = 1;
while(i < N) i += i;
N = i;
}


void solve()
{
int a, b, c, code;

for(int i = 0; i < M; i++)
	{
	scanf("%d", &code);
	if(code == 1)
		{
		scanf("%d%d%d", &a, &b, &c);
		a++;
		add_band(a, b, c);
		}
	else if(code == 3)
		{
		scanf("%d", &a);
		a++;
		find_color(a);
		}
        else if(code == 2) { scanf("%d%d", &a, &b); }
	}

}



void find_color(int a)
{ query(1, N, a, 1); }



void query(int left, int right, int a, int ind)
{
if(tree[ind] != -1) { printf("%d\n", tree[ind]); return; }

int mid = (left + right) / 2;
if(a <= mid) query(left, mid, a, 2*ind);
else query(mid+1, right, a, 2*ind+1);
}



void add_band(int a, int b, int c)
{ add(a, b, 1, N, 1, c); }



void add(int a, int b, int left, int right, int ind, int color)
{
if(a == left && b == right) { tree[ind] = color; return; }

tree[ind] = -1;
int mid = (left + right) / 2;

if(a <= mid && mid < b)
     {
     add(a, mid, left, mid, 2*ind, color);
     add(mid+1, b, mid+1, right, 2*ind+1, color);
     }
else if(mid < a) add(a, b, mid+1, right, 2*ind+1, color);
else if(b <= mid) add(a, b, left, mid, 2*ind, color);
}




void input()
{ scanf("%d%d", &N, &M); }

