#include <iostream>
#include <algorithm>
#include <set>
#include <map>

using namespace std;

int n, m;
map<int, pair<int, int> > r;
typedef map<int, pair<int, int> >::const_iterator iter;

int find_range(int x) {
    return (--r.upper_bound(x))->first;
}

void print_ranges() {
    for (iter it = r.begin(); it != r.end(); it++) {
        cout << '(' << it->first << ", " << it->second.first << " = " << it->second.second << ") ";
    }
    cout << endl;
}

void split(int at) {
    int pos = find_range(at);
    if (pos < at) {
        r[at] = r[pos];
        r[pos].first = at - 1;
    }
}

void not(int x, int y) {
    while (x <= y) {
        split(x);
        split(y + 1);
        int pos = find_range(x);
        r[pos].second = !r[pos].second;
        x = r[pos].first + 1;
    }
}

void query(int x) {
    int left = find_range(x);
    int right = left;
    while (left > 1) {
        int prev = find_range(left - 1);
        if (r[prev].second == r[left].second)
            left = prev;
        else
            break;
    }
    while (right < n) {
        int next = find_range(r[right].second + 1);
        if (r[next].second == r[right].second)
            right = next;
        else
            break;
    }
    cout << r[left].second << ' ' << left << ' ' << r[right].first << '\n';
}

int main() {
    cin >> n >> m;
    r[1] = make_pair(n, 0);
    for (int i = 0; i < m; i++) {
        int t, x, y;
        cin >> t >> x;
        if (t == 1) {
            cin >> y;
            not(x, y);
        } else {
            query(x);
        }
        //print_ranges();
    }
}