#include<stdio.h>
#include<algorithm>
#include<vector>
#include<cstring>
#include<map>
#include<set>
#include<iostream>
#include<bitset>
#include<string>

#define maxdim 50005

using namespace std;

int n,m;
int ad[4*maxdim],valad[4*maxdim],arb[4*maxdim];

inline void propaga ( const int &nod , const int &st , const int &dr ){
	
	if ( !ad[nod] )	return ;
	
	int mij = (st+dr)>>1;
	int nodst = nod<<1;
	int noddr = nodst|1;
	
	ad[nod] = 0;
	ad[nodst] = ad[noddr] = 1;
	valad[nodst] = valad[noddr] = valad[nod];
	
	arb[nodst] = (mij-st+1)*valad[nod];
	arb[noddr] = (dr-mij)*valad[nod];
}

void update ( int nod , int st , int dr , int a , int b , int val ){
	
	if ( a <= st && dr <= b ){
		ad[nod] = 1;
		valad[nod] = val;
		arb[nod] = val*(dr-st+1);
		return ;
	}
	
	propaga(nod,st,dr);
	
	int mij = (st+dr)>>1;
	int nodst = nod<<1;
	int noddr = nodst|1;
	
	if ( a <= mij ){
		update(nodst,st,mij,a,b,val);
	}
	if ( b > mij ){
		update(noddr,mij+1,dr,a,b,val);
	}
	arb[nod] = arb[nodst]+arb[noddr];
}

void query ( int nod , int st , int dr , int a , int b , int &s ){
	
	if ( a <= st && dr <= b ){
		s += arb[nod];
		return ;
	}
	
	propaga(nod,st,dr);
	
	int mij = (st+dr)>>1;
	int nodst = nod<<1;
	int noddr = nodst|1;
	
	if ( a <= mij ){
		query(nodst,st,mij,a,b,s);
	}
	if ( b > mij ){
		query(noddr,mij+1,dr,a,b,s);
	}
	arb[nod] = arb[nodst]+arb[noddr];
}

int main () {
	
	#ifndef ONLINE_JUDGE
	freopen("mindcoding3.in","r",stdin);
	freopen("mindcoding3.out","w",stdout);
	#endif
	
	scanf("%d %d",&n,&m);
	for ( int i = 1 ; i <= m ; ++i ){
		int tip;
		scanf("%d",&tip);
		
		if ( tip == 1 ){
			int a,b,val;
			scanf("%d %d %d",&a,&b,&val);
			update(1,1,n,a,b,val);
		}
		else{
			int x;
			scanf("%d",&x);
			
			int val = 0;
			query(1,1,n,x,x,val);
			printf("%d ",val);
			
			int left = 1,middle,right = x;
			while ( left <= right ){
				middle = (left+right)>>1;
				
				int snow = 0;
				query(1,1,n,middle,x,snow);
				
				if ( snow == val*(x-middle+1) ){
					right = middle-1;
				}
				else{
					left = middle+1;
				}
			}
			
			printf("%d ",left);
			
			left = x,right = n;
			while ( left <= right ){
				middle = (left+right)>>1;
				
				int snow = 0;
				query(1,1,n,x,middle,snow);
				
				if ( snow == val*(middle-x+1) ){
					left = middle+1;
				}
				else{
					right = middle-1;
				}
			}
			
			printf("%d\n",right);
		}
	}
	
	return 0;
}