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


vector<int> arb(400005, 0);
vector<bool> lazy(400005, false);
int n, m;

void update(int node, int start, int end, int left, int right)
{

   if (lazy[node])
   {
      arb[node] = (end - start + 1) - arb[node];
      if (start != end)
      {
         lazy[node * 2] = !lazy[node * 2];
         lazy[node * 2 + 1] = !lazy[node * 2 + 1];
      }
      lazy[node] = false;
   }

   if (start > end || left > end || start > right) return;

   if (start >= left && end <= right)
   {
      arb[node] = (end - start + 1) - arb[node];
      if (start != end)
      {
         lazy[node * 2] = !lazy[node * 2];
         lazy[node * 2 + 1] = !lazy[node * 2 + 1];
      }
      return;
   }

   int mid = (start + end) / 2;
   update(node * 2, start, mid, left, right);
   update(node * 2 + 1, mid + 1, end, left, right);
   arb[node] = arb[node * 2] + arb[node * 2 + 1];
}

int valQuery(int node, int start, int end, int left, int right)
{
   if (start > end || left > end || start > right) return 0 ;

   if (lazy[node])
   {
      arb[node] = (end - start + 1) - arb[node];
      if (start != end)
      {
         lazy[node * 2] = !lazy[node * 2];
         lazy[node * 2 + 1] = !lazy[node * 2 + 1];
      }
      lazy[node] = false;
   }

   if (start >= left && end <= right) return arb[node];

   int mid = (start + end) / 2;
   int lefties = valQuery(node * 2, start, mid, left, right);
   int righties = valQuery(node * 2 + 1, mid + 1, end, left, right);
   return lefties + righties;
}

int getMin(int pos, int value)
{
   int mid, low = 1, hi = pos;
   int qRes, target, p = -1;

   while (low <= hi)
   {
      mid = (low + hi) / 2;
      qRes = valQuery(1, 1, n, mid, hi);
      target = hi - mid + 1;
      if (value == 0) qRes = (hi - mid + 1) - qRes;
      
      if (qRes < target) low = mid + 1;
      else hi = mid - 1, p = mid;
   }
   return p;
}

int getMax(int pos, int value)
{
   int mid, low = pos, hi = n;
   int qRes, target, p = -1;

   while (low <= hi)
   {
      mid = (low + hi) / 2;
      qRes = valQuery(1, 1, n, low, mid);
      target = mid - low + 1;
      if (value == 0) qRes = (mid - low + 1) - qRes;

      if (qRes < target) hi = mid - 1;
      else low = mid + 1, p = mid;
   }
   return p;
}




int main()
{
   ios::sync_with_stdio(false);
   cin.tie(nullptr);
   cout.tie(nullptr);
   cin >> n >> m;
   int op, a, b;
   while(m--)
   {
      cin >> op;
      if (op == 1)
      {
         cin >> a >> b;
         update(1, 1, n, a, b);
      }
      else
      {
         cin >> a;
         b = valQuery(1, 1, n, a, a);
         cout << b << " " << getMin(a, b) << " " << getMax(a, b) << "\n";
      }
   }

   return 0;
}