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

#include <cstdio>
#include <cmath>
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

#define MAX 100100
#define MM 10001

using namespace std;

FILE *in; FILE *out;

int qst, len;

int a[MAX][3]; int n;
int vis[MAX];

vector <int> col[MM];


void dummy(void)
{
int i, c;
int qtype;
int strt, endd, colour;

//fprintf(out, "Dummy\n");

for (i=0; i<MM; i++) col[i].clear();
for (i=0; i<MM; i++) col[i].push_back(0);

for (i=0; i<qst; i++)
    {
    fscanf(in, "%d", &qtype);
    
    if (qtype == 1)
       {
       fscanf(in, "%d %d %d", &strt, &endd, &colour);
       if (strt > endd) {c = strt; strt = endd; endd = c;}
       
       for (c=strt; c<=endd; c++) col[c].push_back(colour);
       continue;
       }
    if (qtype == 2)
       {
       fscanf(in, "%d %d", &strt, &endd);
       if (strt > endd) {c = strt; strt = endd; endd = c;}

       for (c=strt; c<=endd; c++) col[c].pop_back();
       continue;
       }
    if (qtype == 3)
       {
       fscanf(in, "%d", &strt);
       fprintf(out, "%d\n", col[strt][col[strt].size()-1]);
       continue;
       }
    }

return;
}

void dowork(void)
{
int i, c;
int qtype, lft, rght, colour;

//fprintf(out, "Dowork\n");

memset(vis, 0, sizeof(vis));
memset(a, 0, sizeof(a));

a[0][0] = 0; a[0][1] = len; a[0][2] = 0; n = 1;

for (i=0; i<qst; i++)
    {
    fscanf(in, "%d", &qtype);
    
    if (qtype == 1)
       {
       fscanf(in, "%d %d %d", &lft, &rght, &colour);
       if (lft > rght) {c = lft; lft = rght; rght = c;}
       
       a[n][0] = lft; a[n][1] = rght; a[n][2] = colour; n++;
       continue;
       }
    if (qtype == 2)
       {
       fscanf(in, "%d %d", &lft, &rght);
       if (lft > rght) {c = lft; lft = rght; rght = c;}
       
       for (c=n-1; c>=0; c--) if (!vis[c]) if (a[c][0] == lft && a[c][1] == rght) {vis[c] = 1; break;}
       
       continue;
       }
    if (qtype == 3)
       {
       fscanf(in, "%d", &lft);
       
       for (c=n-1; c>=0; c--) if (!vis[c])
           if (a[c][0] <= lft && a[c][1] >=lft) {fprintf(out, "%d\n", a[c][2]); break;}
       
       continue;
       }
    }

return;
}


int main(void)
{
int i;

//in = fopen("bands.in", "rt"); out = fopen("bands.out", "wt");
in = stdin; out = stdout;

fscanf(in, "%d %d", &len, &qst);

if (len < MM) dummy();
else dowork();

return 0;
}
