给定一个序列,

次查询区间的 mex 值,mex 表示最小的没出现过的自然数,

。显然可以使用经典算法轻易解决这个经典问题。
现在蒟蒻 djy 魔改了一下它,给定一个

到

的排列,

次查询区间的 mex 值,但是

变大了,你能帮帮他吗?

,输入数据在程序内生成。
输入描述:
第一行两个整数 $n,m$。
下面给出数据生成模板。
int a[10000001],c[10000002][2],n,m;
unsigned int rd;
inline int rnd(int mod,int seed)
{
rd^=(1<<13);
rd^=(rd>>7);
rd^=(rd<<20);
rd^=(rd>>3);
rd^=(rd<<10);
rd^=(rd<<5);
rd^=(1<<2);
return rd%mod+seed;
}
// 生成序列 a
void make_sequence()
{
for(int i=1;i<=n;i++)
{
a[i]=i-1;
}
for(int i=1;i<=n;i++)
{
swap(a[i],a[rnd(n,1)]);
}
}
// 生成一个询问,表示查询区间 [l,r] 的 mex
pair<int,int> make_query()
{
int l=rnd(n,1);
int r=rnd(n+1-l,l);
return make_pair(l,r);
}
输出描述:
一行一个整数为所有询问答案的异或和。