#include<bits/stdc++.h>
#define ls k<<1
#define rs k<<1|1
using namespace std;
int tt;
int n,m;
char s[200005];
struct segment{
int L,R,sum,lazy;
int sL[2],sR[2];
#define L(k) seg[k].L
#define R(k) seg[k].R
#define sum(k) seg[k].sum
#define lazy(k) seg[k].lazy
#define sL(k,x) seg[k].sL[x]
#define sR(k,x) seg[k].sR[x]
}seg[1000005];
void print(segment ans){
if(ans.sum) cout<<"NO\n";
else cout<<"YES\n";
}
int num(char ch){
return ch-'a';
}
segment operator +(segment x,segment y){
segment now;
now.L=x.L,now.R=y.R;
if(now.R-now.L<=2){
now.sL[0]=num(s[now.L]),now.sL[1]=num(s[now.L+1]);
now.sR[0]=num(s[now.R]),now.sR[1]=num(s[now.R-1]);
if(s[now.L]==s[now.R]) now.sum=1;
else now.sum=0;
return now;
}
now.sL[0]=x.sL[0],now.sL[1]=x.sL[1];
now.sR[0]=y.sR[0],now.sR[1]=y.sR[1];
now.sum=x.sum|y.sum;
if(x.sR[0]==y.sL[0]) now.sum=1;
if(x.sR[0]==y.sL[1]) now.sum=1;
if(x.sR[1]==y.sL[0]) now.sum=1;
return now;
}
void pushdown(int k){
if(lazy(k)){
sL(ls,0)=(sL(ls,0)+lazy(k))%26;
sL(ls,1)=(sL(ls,1)+lazy(k))%26;
sR(ls,0)=(sR(ls,0)+lazy(k))%26;
sR(ls,1)=(sR(ls,1)+lazy(k))%26;
sL(rs,0)=(sL(rs,0)+lazy(k))%26;
sL(rs,1)=(sL(rs,1)+lazy(k))%26;
sR(rs,0)=(sR(rs,0)+lazy(k))%26;
sR(rs,1)=(sR(rs,1)+lazy(k))%26;
lazy(ls)=(lazy(ls)+lazy(k))%26;
lazy(rs)=(lazy(rs)+lazy(k))%26;
lazy(k)=0;
}
}
void build(int k,int l,int r){
L(k)=l,R(k)=r;
if(l==r){sum(k)=0;return;}
int mid=(l+r)>>1;
cout<<l<<" "<<r<<"\n";
build(ls,l,mid);
build(rs,mid+1,r);
seg[k]=seg[ls]+seg[rs];
}
void add(int k,int l,int r,int x){
if(L(k)>r||R(k)<l) return;
if(L(k)>=l&&R(k)<=r){
sL(k,0)=(sL(k,0)+x)%26;
sL(k,1)=(sL(k,1)+x)%26;
sR(k,0)=(sR(k,0)+x)%26;
sR(k,1)=(sR(k,1)+x)%26;
lazy(k)=(lazy(k)+x)%26;
return;
}
pushdown(k);
add(ls,l,r,x);
add(rs,l,r,x);
seg[k]=seg[ls]+seg[rs];
}
segment ask(int k,int l,int r){
if(L(k)>r||R(k)<l){
segment now;
now.sum=0;
return now;
}
pushdown(k);
if(L(k)>=l&&R(k)<=r) return seg[k];
return ask(ls,l,r)+ask(rs,l,r);
}
void solve(){
cin>>n>>m;
cin>>(s+1);
build(1,1,n);
for(int i=1;i<=m;i++){
int op,l,r,x;
cin>>op;
if(op&1){
cin>>l>>r>>x;
x%=26;
if(x) add(1,l,r,x);
}else{
cin>>l>>r;
print(ask(1,l,r));
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>tt;
while(tt--) solve();
return 0;
}