1 #include <stdio.h>
2 #include <string.h>
3 #include <algorithm>
4 using namespace std;
5
6 inline int id(int u, int v) { return (u + v) | (u < v); }
7 inline int md(int u, int v) { return (u + v) >> 1; }
8
9 const int N = 50010;
10 int h[N << 1];
11 int g[N << 1];
12
13 void down(int u, int v) {
14 int d = md(u, v);
15 int t = id(u, v);
16 int l = id(u, d);
17 int r = id(d + 1, v);
18
19 if (!g[t]) {
20 g[t] = 1;
21 if (h[t] == 0) {
22 h[l] = h[r] = 0;
23 } else if (h[t] == v - u + 1) {
24 h[l] = d - u + 1;
25 h[r] = v - (d + 1) + 1;
26 }
27 g[l] = g[r] = 0;
28 }
29 }
30
31 void set(int u, int v, int a, int b) {
32 int d = md(u, v);
33 int t = id(u, v);
34 int l = id(u, d);
35 int r = id(d + 1, v);
36
37 if (u == a && v == b) {
38 h[t] = v - u + 1;
39 g[t] = 0;
40 return;
41 }
42
43 down(u, v);
44
45 if (b <= d)
46 set(u, d, a, b);
47 else if (d + 1 <= a)
48 set(d + 1, v, a, b);
49 else {
50 set(u, d, a, d);
51 set(d + 1, v, d + 1, b);
52 }
53
54 h[t] = h[l] + h[r];
55 }
56
57 void clear(int u, int v, int a, int b) {
58 int d = md(u, v);
59 int t = id(u, v);
60 int l = id(u, d);
61 int r = id(d + 1, v);
62
63 if (u == a && v == b) {
64 h[t] = 0;
65 g[t] = 0;
66 return;
67 }
68
69 down(u, v);
70
71 if (b <= d)
72 clear(u, d, a, b);
73 else if (d + 1 <= a)
74 clear(d + 1, v, a, b);
75 else {
76 clear(u, d, a, d);
77 clear(d + 1, v, d + 1, b);
78 }
79
80 h[t] = h[l] + h[r];
81 }
82
83 int find(int u, int v, int a, int b) {
84 int d = md(u, v);
85 int t = id(u, v);
86 int l = id(u, d);
87 int r = id(d + 1, v);
88
89 if (!g[t]) {
90 if (h[t] == v - u + 1)
91 return b - a + 1;
92 else if (h[t] == 0)
93 return 0;
94 }
95
96 if (u == a && v == b) {
97 return h[t];
98 }
99
100 if (b <= d)
101 return find(u, d, a, b);
102 else if (d + 1 <= a)
103 return find(d + 1, v, a, b);
104 else
105 return find(u, d, a, d) + find(d + 1, v, d + 1, b);
106 }
107
108 int n, q;
109
110 int main() {
111 // freopen("in.txt", "r", stdin);
112 // freopen("out.txt", "w", stdout);
113 int T; scanf("%d", &T);
114 while (T--) {
115 scanf("%d %d", &n, &q);
116 memset(h, 0, sizeof(h));
117 memset(g, 0, sizeof(g));
118 while (q--) {
119 int c, u, v, f;
120 int l, r, d, first, second;
121 scanf("%d %d %d", &c, &u, &v);
122 f = v;
123 switch (c) {
124 case 1:
125 l = u - 1, r = n;
126 while (l + 1 < r) {
127 d = (l + r) >> 1;
128 if (find(0, n - 1, u, d) < d - u + 1)
129 r = d;
130 else
131 l = d;
132 }
133 first = r;
134
135 if (first >= n || !f) {
136 puts("Can not put any one.");
137 } else {
138 u = first;
139 l = u, r = n;
140 while (l + 1 < r) {
141 d = (l + r) >> 1;
142 if (d - u + 1 - find(0, n - 1, u, d) <= f)
143 l = d;
144 else
145 r = d;
146 }
147 v = l;
148
149 l = u, r = v + 1;
150 while (l + 1 < r) {
151 d = (l + r) >> 1;
152 if (find(0, n - 1, d, v) < v - d + 1)
153 l = d;
154 else
155 r = d;
156 }
157 second = l;
158
159 printf("%d %d\n", first, second);
160 set(0, n - 1, first, second);
161 }
162 break;
163 case 2:
164 printf("%d\n", find(0, n - 1, u, v));
165 clear(0, n - 1, u, v);
166 break;
167 }
168 }
169 }
170 return 0;
171 }