#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=4e5+10;
int n,a[N],q[N],hh,ls[N],rs[N],L[N],R[N],f[N][3],ans;
char s[N];
bool fg;
inline void dfs(int u){
if(fg||!u) return ;
dfs(ls[u]),dfs(rs[u]);
L[u]=ls[u]?L[ls[u]]:u;
R[u]=rs[u]?R[rs[u]]:u;
f[u][0]=f[ls[u]][0];
f[u][1]=f[rs[u]][1];
f[u][2]=f[ls[u]][0]+f[rs[u]][1];
ans=max(ans,f[ls[u]][1]+f[rs[u]][0]);
if(u==q[1]) return ;
if((s[u]=='L'&&L[u]==1)||(s[u]=='R'&&R[u]==n)) return fg=1,void();
if(L[u]==1) s[u]='R';
if(R[u]==n) s[u]='L';
if(s[u]!='R'){
f[u][0]=max(f[u][0],1+max(f[ls[u]][1],f[rs[u]][0]));
f[u][2]=max(f[u][2],1+max(f[ls[u]][1]+f[rs[u]][1],f[rs[u]][2]));
ans=max(ans,1+max(f[ls[u]][0]+f[rs[u]][0],f[ls[u]][2]));
}
if(s[u]!='L'){
f[u][1]=max(f[u][1],1+max(f[ls[u]][1],f[rs[u]][0]));
f[u][2]=max(f[u][2],1+max(f[ls[u]][0]+f[rs[u]][0],f[ls[u]][2]));
ans=max(ans,1+max(f[ls[u]][1]+f[rs[u]][1],f[rs[u]][2]));
}
}
inline int solve(){
scanf("%d",&n);
hh=0;
ans=0;
fg=0;
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
while(hh&&a[q[hh]]<a[i]) ls[i]=q[hh--];
if(hh) rs[q[hh]]=i;
q[++hh]=i;
}
scanf("%s",s+1);
dfs(q[1]);
return fg?-1:ans;
}
int main(){
int T;
scanf("%d",&T);
while(T--){
printf("%d\n",solve());
for(int i=1;i<=n;++i) ls[i]=rs[i]=L[i]=R[i]=0;
}
return 0;
}