#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int N, M;
int ARB[50002 * 4], A1, A2, Av, Ar;

void update(int nod, int i1, int i2)
{
	if (A1 <= i1 && i2 <= A2)
	{
		ARB[nod] = Av * (i2 - i1 + 1);
		return;
	}
	
	int mid = (i1 + i2) / 2;
	if (ARB[nod] != ARB[nod * 2] + ARB[nod * 2 + 1])
	{
		if (ARB[nod] == 0)
		{
			ARB[nod * 2] = 0;
			ARB[nod * 2 + 1] = 0;
		}
		else
		{
			ARB[nod * 2] = mid - i1 + 1;
			ARB[nod * 2 + 1] = i2 - mid;
		}
	}
	
	if (A1 <= mid) update(nod * 2, i1, mid);
	if (A2 > mid)  update(nod * 2 + 1, mid + 1, i2);
	
	ARB[nod] = ARB[nod * 2] + ARB[nod * 2 + 1];
}
void query(int nod, int i1, int i2)
{
	if (A1 <= i1 && i2 <= A2)
	{
		Ar += ARB[nod];
		return;
	}
	
	int mid = (i1 + i2) / 2;
	if (ARB[nod] != ARB[nod * 2] + ARB[nod * 2 + 1])
	{
		if (ARB[nod] == 0)
		{
			ARB[nod * 2] = 0;
			ARB[nod * 2 + 1] = 0;
		}
		else
		{
			ARB[nod * 2] = mid - i1 + 1;
			ARB[nod * 2 + 1] = i2 - mid;
		}
	}
	
	if (A1 <= mid) query(nod * 2, i1, mid);
	if (A2 > mid)  query(nod * 2 + 1, mid + 1, i2);
}
bool is_sum(int i1, int i2)
{
	A1 = i1, A2 = i2, Ar = 0;
	query(1, 1, N);
	
	if (Ar == i2 - i1 + 1) return true;
	if (Ar == 0) return true;
	return false;
}

int main()
{
	cin.sync_with_stdio(false);
	
	cin >> N >> M;
	for (int i = 1, type; i <= M; ++i)
	{
		cin >> type;
		if (type == 1)
		{
			int a, b, c;
			cin >> a >> b >> c;
			
			A1 = a;
			A2 = b;
			Av = c;
			update(1, 1, N);
		}
		else
		{
			int a;
			cin >> a;
			
			int step = (1 << 16), lf = a, rg = a;
			
			for (; step; step >>= 1)
				if (lf - step >= 1 && is_sum(lf - step, a))
					lf -= step;
			step = (1 << 16);
			for (; step; step >>= 1)
				if (rg + step <= N && is_sum(a, rg + step))
					rg += step;
			
			A1 = a, A2 = a, Ar = 0;
			query(1, 1, N);
			
			cout << Ar << ' ' << lf << ' ' << rg << '\n';
		}
	}
	
}