rt
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1000000000000000001;
ll minz[8000010], mino[8000010];
int ls[8000010], rs[8000010], root;
int tag2[8000010], tot;
bool tag1[8000010];
//tag2为1表示全部赋值为1,tag2为2表示全部赋值为0
void add_tag(int x, ll l, ll r, int sum) {
if (sum == 1) {
tag1[x] = 0;
tag2[x] = 1;
minz[x] = N, mino[x] = l;
}
if (sum == 2) {
tag1[x] = 0;
tag2[x] = 2;
minz[x] = l, mino[x] = N;
}
if (sum == 3) {
tag1[x] = 1 - tag1[x];
swap(minz[x], mino[x]);
}
}
void push_down(int x, ll l, ll r) {
ll mid = l + r >> 1;
if (ls[x] == 0) {
ls[x] = ++tot;
minz[ls[x]] = l, mino[ls[x]] = N;
}
if (rs[x] == 0) {
rs[x] = ++tot;
minz[rs[x]] = mid + 1, mino[rs[x]] = N;
}
if (tag2[x]) {
add_tag(ls[x], l, mid, tag2[x]);
add_tag(rs[x], mid + 1, r, tag2[x]);
}
if (tag1[x]) {
add_tag(ls[x], l, mid, 3);
add_tag(rs[x], mid + 1, r, 3);
}
tag2[x]=tag1[x]=0;
}
void insert(int &rt, ll l, ll r, ll L, ll R, int sum) {
if (rt == 0) {
rt = ++tot;
minz[rt] = l, mino[rt] = N;
}
if (L <= l && r <= R) {
add_tag(rt, l, r, sum);
return;
}
push_down(rt, l, r);
ll mid = l + r >> 1;
if (L <= mid) insert(ls[rt], l, mid, L, R, sum);
if (mid < R) insert(rs[rt], mid + 1, r, L, R, sum);
minz[rt] = min(minz[ls[rt]], minz[rs[rt]]);
mino[rt] = min(mino[ls[rt]], mino[rs[rt]]);
}
int op, n;
ll a,b;
signed main() {
scanf("%d", &n);
while (n--) {
scanf("%d%lld%lld", &op, &a, &b);
insert(root, 1, 1e18, a, b, op);
printf("%lld\n", minz[1]);
}
}