//Problem #D from Codeforces mindcode
#include <cmath>

#include <algorithm>
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;

#ifdef __APPLE__
#define DEBUG 1
#else
#define DEBUG 0
#endif

#define fi first
#define se second
#define int64 long long

int el[250][220];
int nr[2][250];

//	ifstream in("date.in");
//	ofstream out("date.out");

void check(int ind) {
	if (nr[0][ind] == 220 or nr[1][ind] == 220) {
		int e = (nr[0][ind] == 220) ? (0) : (1);
		for (int i = 0; i < 220; ++i)
			el[ind][i] = e;
	}
}

int get_el(int ind) {
 	if (nr[0][ind / 220] == 220 or nr[1][ind / 220] == 220) {
		int e = (nr[0][ind / 220] == 220) ? (0) : (1);
		return e;
	}   
	return el[ind / 220][ind % 220];
}

int get_el(int a, int b) {
	return get_el(a * 220 + b);
}

int main() {
	int n, m;
	cin >> n >> m;

    for (int i = 0; (i + 1) * 220 <= n; ++i)
		nr[0][i] = 220;
	nr[0][(n - 1) / 220] = ((n - 1) % 220) + 1;

	while (m--) {
		int t;
		cin >> t;

		if (t == 1) {
			int a, b, c;
			cin >> a >> b >> c;
			a--;
			b--;
			int A = a / 220;
			int B = b / 220;
			for (int i = A + 1; i < B; ++i) {
				nr[c][i] = 220;
				nr[c ^ 1][i] = 0;
			}

			if (A == B) {
				check(A);
				for (int i = a % 220; i <= b % 220; ++i) {
					nr[el[A][i]][A]--;
					nr[c][A]++;
					el[A][i] = c;
				}
			} else {
				check(A);
				for (int i = a % 220; i < 220; ++i) {
					nr[el[A][i]][A]--;
					nr[c][A]++;
					el[A][i] = c;
				}
				check(B);
				for (int i = 0; i <= b % 220; ++i) {
					nr[el[B][i]][B]--;
					nr[c][B]++;
					el[B][i] = c;
				}
			}
		} else {
			int x;
			cin >> x;
			x--;
			int X = x / 220;
            int c = get_el(x);
			
			int st = X - 1, dr = X + 1;
			for (; st >= 0 and nr[c][st] == 220; --st)
				;
			for (; dr <= n / 220 and nr[c][dr] == 220; ++dr)
				;
			int c_st, c_dr;

			for (c_st = x % 220; c_st >= 0 and get_el(X, c_st) == c; --c_st)
				;
			for (c_dr = x % 220; c_dr < 220 and get_el(X, c_dr) == c; ++c_dr)
				;

//			cerr << st << '\t' << X << '\t' << dr << '\n';
//			cerr << nr[c][dr] << '\n';

			int rez_st, rez_dr;

			if (c_st == -1) {
				for (c_st = 219; c_st >= 0 and get_el(st, c_st) == c; --c_st)
					;
				rez_st = (c_st + 1) + st * 220 + 1;
			} else {
				rez_st = (c_st + 1) + X * 220 + 1;
			}
			if (c_dr == 220) {
				if (X == (n - 1) / 220) {
					rez_dr = n;
				} else {
					for (c_dr = 0; c_dr < 220 and get_el(dr, c_dr) == c; ++c_dr)
						;
					rez_dr = (c_dr - 1) + dr * 220 + 1;
				}
			} else {
				rez_dr = (c_dr - 1) + X * 220 + 1;
			}
			rez_dr = min(rez_dr, n);
			rez_st = max(1, rez_st);
			cout << c << ' ' << rez_st << ' ' << rez_dr << '\n';
		}
//		for (int i = 0; i < n; ++i)
//			cerr << el[0][i] << ' ';
//		cerr << '\n' << nr[0][0] << '\t' << nr[1][0] << '\n';
	}
//	in.close();
//	out.close();
    return 0;
}