/*
TASK:bands
LANG:C++
*/
#include <iostream>
#include <stdio.h>
using namespace std;

struct A{
    int b;
    int e;
    int c;
};

int m,n,i,cnt,j,g,h,u;
A asd[100001];
char t[65537];

void push(int x,int y){
    x+=u;
    while(x>=1) {
        t[x]+=y;
        x>>=1;
    }
}

int query(int x){
    int q;
    x+=u;
    while(x>1){
        if((x&1)==1) q+=t[x-1];
        x>>=1;
    }
    return q;
}
int main(){
    cin>>n>>m;
    for(u=1;(u<<1)<n;u=u<<1);
    u--;
    while(m>0){
        scanf("%d",&i);
        if(i==1){
           cnt++;
           scanf("%d %d %d",&asd[cnt].b,&asd[cnt].e,&asd[cnt].c);
           asd[cnt].e--;
           push(asd[cnt].b+1,asd[cnt].c);
           push(asd[cnt].e+1,-asd[cnt].c);
        }else if(i==2){
           scanf("%d %d",&g,&h);h--;
           for(j=cnt;j>=1;j--){
               if(g==asd[j].b&&h==asd[j].e){asd[j].c=-1;break;}
               if(g>=asd[j].b&&g<=asd[j].e) break;
               if(h>=asd[j].b&&h<=asd[j].e) break;
               if(g<=asd[j].b&&h>=asd[j].e) break;
           }
        }else {
           scanf("%d",&g);
           if(query(g+1)==0){printf("0\n");}
           else{
               for(j=cnt;j>=1;j--){
                   if(g>=asd[j].b&&g<=asd[j].e&&asd[j].c!=-1) {
                       printf("%d\n",asd[j].c);
                       break;
                   }
               }
               if(j==0) printf("0\n");
           }
        }
        m--;
    }
    return 0;
}

