#include <cstdio>
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <string>
#include <ctime>
#include <cassert>
#include <utility>

using namespace std;

#define MAXN 50050

int N, M, Q, t, a, b, c;
int S[MAXN];
int Supd[MAXN];
int A[MAXN];

void updateSlot(int idx) {
    if(Supd[idx] != -1) {
        for(int i = idx * M; i < idx * M + M; i++)
            A[i] = Supd[idx];
        Supd[idx] = -1;
    }
}

void update(int a, int b, int c) {
    int i;
    int aIdx = a / M;
    updateSlot(aIdx);
    for(i = a; i <= b && i % M != 0; i++) {
        int d = c - A[i];
        S[i / M] += d;
        A[i] = c;
    }
    
    for(; i + M <= b; i += M) {
        S[i / M] = c * M;
        Supd[i / M] = c;
    }
    
    int bIdx = b / M;
    if(bIdx != aIdx || a % M == 0) {
        updateSlot(bIdx);
        for(i = bIdx * M; i <= b; i++) {
            int d = c - A[i];
            S[i / M] += d;
            A[i] = c;
        }
    }
}

pair<int, int> query(int a) {
    int y = a;
    int z = a;
    int aIdx = a / M;
    int i;
    
    updateSlot(aIdx);
    int val = A[a];
    
    for(i = a; (i + 1) % M != 0 && A[i] == val; i--);
    if((i + 1) % M == 0) {
        for(; i >= 0; i -= M) {
            int need = val * M;
            if(S[i / M] != need) {
                updateSlot(i / M);
                while(A[i] == val)
                    i--;
                break;
            }
        }
    }
    y = i + 1;
    
    for(i = a; i < N && i % M != 0 && A[i] == val; i++);
    if(i < N && i % M == 0) {
        for(; i + M < N; i += M) {
            int need = val * M;
            if(S[i / M] != need) {
                updateSlot(i / M);
                while(A[i] == val)
                    i++;
                break;
            }
        }
        if(i % M == 0 && i + M >= N) {
            updateSlot(i / M);
            while(i < N && A[i] == val)
                i++;
        }
    }
    z = i - 1;
    
    return make_pair(y, z);
}

int main() {
//	freopen("date.in", "r", stdin);
//	freopen("date.out","w", stdout);
	
	scanf("%d %d", &N, &Q);
	
	M = 1;
	while((M + 1) * (M + 1) <= N)
        M++;
    
    fill(Supd, Supd + N, -1);
	for(int i = 0; i < Q; i++) {
        scanf("%d %d", &t, &a);
        a--;
        if(t == 1) {
            scanf("%d %d", &b, &c);
            b--;
            update(a, b, c);
        }
        else {
            pair<int, int> q = query(a);
            printf("%d %d %d\n", A[a], q.first + 1, q.second + 1);
        }
	}
	
	return 0;
}