#include<bits/stdc++.h>
#define N 1000010
#define INF 0x3f3f3f3f
#define eps 1e-10
#define pi 3.141592653589793
#define P 1000000007
#define LL long long
#define pb push_back
#define fi first
#define se second
#define cl clear
#define si size
#define lb lower_bound
#define ub upper_bound
#define mem(x) memset(x,0,sizeof x)
#define sc(x) scanf("%d",&x)
#define scc(x,y) scanf("%d%d",&x,&y)
#define sccc(x,y,z) scanf("%d%d%d",&x,&y,&z)
using namespace std;
int f[N][30],pos[N][30];
int n,m,ans=0,a[N];
inline void ins(int i,int x)
{
int k=i;
memcpy(f[i],f[i-1],sizeof(f[i]));
memcpy(pos[i],pos[i-1],sizeof(pos[i]));
for(int j=29;j>=0;j--)
if (x>>j)
{
if (!f[i][j])
{
f[i][j]=x;
pos[i][j]=k;
break;
} else
{
if (k>pos[i][j]) swap(x,f[i][j]),swap(k,pos[i][j]);
x^=f[i][j];
}
}
}
int main()
{
int T_T; sc(T_T);
while(T_T--)
{
scc(n,m); ans=0;
for(int i=1;i<=n;i++)
{
int x; sc(x);
ins(i,x);
}
while(m--)
{
int op; sc(op);
if (op)
{
int x; sc(x);
x^=ans; ins(++n,x);
} else
{
int l,r,res=0; scc(l,r);
l=(l^ans)%n+1; r=(r^ans)%n+1;
if (l>r) swap(l,r);
for(int i=29;i>=0;i--)
if (pos[r][i]>=l) res=max(res,res^f[r][i]);
printf("%d\n",ans=res);
}
}
for(int i=1;i<=n;i++)
{
memset(f[i],0,sizeof(f[i]));
memset(pos[i],0,sizeof(pos[i]));
}
}
}