inlineint __read() { intx(0), t(1); charo(getchar()); while (o < '0' || o > '9') { if (o == '-') t = -1; o = getchar(); } for (; o >= '0' && o <= '9'; o = getchar()) x = (x << 1) + (x << 3) + (o ^ 48); return x * t; }
int a[maxn], sum[maxn], ans[maxn]; int n, m, cnt, tree[maxn]; int __prev[maxn], __last[maxn]; map <int, int> T;
structNode { int l, r, id; booloperator < (const Node & T) const { return r < T.r; } }Que[maxn];
inlinevoidUpdate(int p, int val) { while (p <= n) { tree[p] ^= val; p += lowbit(p); } }
inlineintQuery(int p) { intans(0); while (p) { ans ^= tree[p]; p -= lowbit(p); } return ans; }