#pragma GCC optimize("Ofast") #pragma GCC target("avx2") #define rd_init() char*rp=({char*mmap();mmap(0l,1l<<25,1,2,0,0ll);}) #define rd() ({int _v=0,_c;while(_c=*rp++-48,_c>=0)_v=_v*10+_c;_v;}) #define rep(v,e) for(typeof(e)v=0;v>12); b1[c][x>>12]|=1ul<<(x>>6); b0[c][x>>6]|=1ul<>6]&=~(1ul<>12]&=~(1ul<<(x>>6)))){ b2[c]&=~(1ul<<(x>>12)); } } } int bsminge(int c,int x){ { ulong a=b0[c][x>>6]&~0ul<>12]&~0ul<<(x>>6); if(a){ int j=__builtin_ctzl(a)|x>>6&~0x3ful; int i=__builtin_ctzl(b0[c][j])|j<<6; return i; } } x=(x|0xfff)+1; { ulong a=b2[c]&~0ul<<(x>>12); if(a){ int k=__builtin_ctzl(a); int j=__builtin_ctzl(b1[c][k])|k<<6; int i=__builtin_ctzl(b0[c][j])|j<<6; return i; } } return -1; } char wbuf[1<<25]; char s[200000]; int main(){ char*wp=wbuf; rd_init(); int n=rd(); int q=rd(); rep(i,n){ s[i]=*rp++-'a'; bsadd(s[i],i); } ++rp; repeat(q){ int t=*rp; rp+=2; if(t=='1'){ int i=rd()-1; bsdel(s[i],i); s[i]=*rp-'a'; rp+=2; bsadd(s[i],i); }else{ int j=-1; for(int c;c=*rp++-'a',c>=0;){ j=bsminge(c,j+1); if(j<0){ while(*rp++-'a'>=0){ } *wp++='N'; *wp++='o'; goto hoge; } } *wp++='Y'; *wp++='e'; *wp++='s'; hoge:; *wp++='\n'; } } write(1,wbuf,wp-wbuf); _exit(0); }