#include <iostream>
#include <fstream>
#include <algorithm>
#include <ctime>
#include <cstdlib>
#include <cstring>

using namespace std;

const int Nmax = 50005;

struct BUCKET
{
    int sum;
    int val;
    int s, d;
};

int v[Nmax + 1], apart[Nmax + 1];
BUCKET bucket[400];
int N, Q, SQRTN, LG;

void update_sum( int ind )
{
    bucket[ind].sum = 0;

    for ( int i = bucket[ind].s; i <= bucket[ind].d; ++i )
            bucket[ind].sum += v[i];
}

void update_val( int ind )
{
    if ( bucket[ind].val != -1 )
    {
        for ( int i = bucket[ind].s; i <= bucket[ind].d; ++i )
                v[i] = bucket[ind].val;

        bucket[ind].val = -1;
    }
}

void update( int x, int y, int c )
{
    int apx = apart[x];
    int apy = apart[y];

    int dr = min( apx * SQRTN, y );

    update_val( apx );

    for ( int i = x; i <= dr; ++i )
    {
        v[i] = c;
    }

    update_sum( apx );

    for ( int j = apx + 1; j < apy; ++j )
    {
        bucket[j].val = c;
        bucket[j].sum = c * ( bucket[j].d - bucket[j].s + 1 );
    }

    int st = max( ( apy - 1 ) * SQRTN + 1, x );

    update_val( apy );

    for ( int i = st; i <= y; ++i )
    {
        v[i] = c;
    }

    update_sum( apy );
}

void query( int x )
{
    int apx = apart[x];

    update_val( x );
    update_sum( apx );

    int fvalue = v[x];

    int capat_st = x, capat_dr = x;

    for ( int j = x; j >= bucket[apx].s; j-- )
    {
        if ( v[j] == fvalue )
        {
            capat_st = j;
        }
        else
            break;
    }

    for ( int j = apx - 1; j >= 1; j-- )
    {
        if ( bucket[j].val != -1 )
        {
            if ( bucket[j].val == fvalue )
            {
                capat_st = bucket[j].s;
                continue;
            }
            else
            {
                break;
            }
        }
        else
        {
            if ( bucket[j].sum == fvalue * ( bucket[j].d - bucket[j].s ) )
            {
                capat_st = bucket[j].s;
                continue;
            }
            else
            {
                for ( int i = bucket[j].d; i >= bucket[j].s; i-- )
                {
                    if ( v[i] == fvalue )
                    {
                        capat_st = i;
                    }
                    else
                        break;
                }

                break;
            }
        }
    }

    for ( int j = x; j <= bucket[apx].d; j++ )
    {
        if ( v[j] == fvalue )
        {
            capat_dr = j;
        }
        else
            break;
    }

    for ( int j = apx + 1; j < SQRTN; ++j )
    {
        if ( bucket[j].val != -1 )
        {
            if ( bucket[j].val == fvalue )
            {
                capat_dr = bucket[j].d;
                continue;
            }
            else
            {
                break;
            }
        }
        else
        {
            if ( bucket[j].sum == fvalue * ( bucket[j].d - bucket[j].s ) )
            {
                capat_dr = bucket[j].d;
                continue;
            }
            else
            {
                for ( int i = bucket[j].s; i <= bucket[j].d; i++ )
                {
                    if ( v[i] == fvalue )
                    {
                        capat_dr = i;
                    }
                    else
                        break;
                }

                break;
            }
        }
    }

    cout <<  v[x] << " " << capat_st << " " << capat_dr << "\n";
}

int main()
{
    ///ifstream cin("date.in");

    cin >> N >> Q;

    for ( int i = 1; i <= N; ++i )
            v[i] = 0;

    SQRTN = 1;

    while ( SQRTN * SQRTN < N ) SQRTN++;

    int j = 1;

    for ( int i = 1; i <= N; i += ( SQRTN + 1 ) )
    {
        bucket[j].s = bucket[j - 1].d + 1;
        bucket[j].d = min( bucket[j].s + SQRTN, N );
        bucket[j].val = -1;

        j++;
    }

    for ( int i = 1, nrc = 1; i <= N; ++i )
    {
        apart[i] = nrc;

        if ( i % SQRTN == 0 ) nrc++;
    }

    int tip, a, b, c;

    while ( Q-- )
    {
        cin >> tip;

        if ( tip == 1 )
        {
            cin >> a >> b >> c;

            update( a, b, c );
        }
        else
        {
            cin >> a;

            query( a );
        }
    }

    return 0;
}