#include <bits/stdc++.h>
#define ll long long
#define fast ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
#define endl '\n'
#define all(n) (n).begin(), (n).end()
using namespace std;
const ll oo = 1e18;
const ll mod = 1e9 + 7;
const ll nmax = 2e5 + 8;
const ll base = 31;
ll n, q, POW[nmax];
void create(){
POW[0] = 1;
for ( ll i = 1; i <= 1e5; ++i){
POW[i] = (POW[i - 1] * base) % mod;
}
}
struct IT{
ll st[4 * nmax];
string s;
void build( ll i, ll l, ll r){
if ( l == r){
st[i] = s[l - 1] - 'a' + 1;
return;
}
ll mid = ( l + r ) / 2;
build(2 * i, l, mid);
build(2 * i + 1, mid + 1, r);
st[i] = ((st[2 * i] * POW[r - mid]) % mod + st[2 * i + 1]) % mod;
}
void update( ll i, ll l, ll r, ll pos, char val){
if ( pos < l || pos > r){
return;
}
if ( l == r){
st[i] = val - 'a' + 1;
return;
}
ll mid = ( l + r ) / 2;
update(2 * i, l, mid, pos, val);
update(2 * i + 1, mid + 1, r, pos, val);
st[i] = ((st[2 * i] * POW[r - mid]) % mod + st[2 * i + 1]) % mod;
}
ll get(ll i, ll l, ll r, ll u, ll v){
if ( v < l || u > r || u > v){
return 0;
}
if ( u <= l && r <= v){
return st[i];
}
ll mid = (l + r) / 2;
return (get(i * 2, l, mid, u, v) * POW[max(0LL, min(r, v) - mid)] % mod + get(i * 2 + 1, mid + 1, r, u, v)) % mod;
}
};
IT res, sol;
main(){
fast;
create();
cin >> n >> q >> res.s;
sol.s = res.s;
sol.s = sol.s;
reverse(all(res.s));
res.s = res.s;
res.build(1, 1, n); sol.build(1, 1, n);
while(q--){
ll type;
cin >> type;
if ( type == 1){
ll pos; char x;
cin >> pos >> x;
sol.update(1, 1, n, pos, x);
res.update(1, 1, n, n - pos + 1, x);
}
else{
ll x, y;
cin >> x >> y;
ll j = sol.get(1, 1, n, x, y);
ll k = res.get(1, 1, n, n - y + 1, n - x + 1);
if ( j == k ){
cout << "YES" << endl;
}
else{
cout << "NO" << endl;
}
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZmFzdCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShudWxscHRyKTsgY291dC50aWUobnVsbHB0cik7CiNkZWZpbmUgZW5kbCAnXG4nCiNkZWZpbmUgYWxsKG4pIChuKS5iZWdpbigpLCAobikuZW5kKCkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGxsIG9vID0gMWUxODsKY29uc3QgbGwgbW9kID0gMWU5ICsgNzsKY29uc3QgbGwgbm1heCA9IDJlNSArIDg7CmNvbnN0IGxsIGJhc2UgPSAzMTsKCmxsIG4sIHEsIFBPV1tubWF4XTsKdm9pZCBjcmVhdGUoKXsKICAgIFBPV1swXSA9IDE7CiAgICBmb3IgKCBsbCBpID0gMTsgaSA8PSAxZTU7ICsraSl7CiAgICAgICAgUE9XW2ldID0gKFBPV1tpIC0gMV0gKiBiYXNlKSAlIG1vZDsKICAgIH0KfQpzdHJ1Y3QgSVR7CiAgICBsbCBzdFs0ICogbm1heF07CiAgICBzdHJpbmcgczsKICAgIHZvaWQgYnVpbGQoIGxsIGksIGxsIGwsIGxsIHIpewogICAgICAgIGlmICggbCA9PSByKXsKICAgICAgICAgICAgc3RbaV0gPSBzW2wgLSAxXSAtICdhJyArIDE7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgbGwgbWlkID0gKCBsICsgciApIC8gMjsKICAgICAgICBidWlsZCgyICogaSwgbCwgbWlkKTsKICAgICAgICBidWlsZCgyICogaSArIDEsIG1pZCArIDEsIHIpOwogICAgICAgIHN0W2ldID0gKChzdFsyICogaV0gKiBQT1dbciAtIG1pZF0pICUgbW9kICsgc3RbMiAqIGkgKyAxXSkgJSBtb2Q7CiAgICB9CiAgICB2b2lkIHVwZGF0ZSggbGwgaSwgbGwgbCwgbGwgciwgbGwgcG9zLCBjaGFyIHZhbCl7CiAgICAgICAgaWYgKCBwb3MgPCBsIHx8IHBvcyA+IHIpewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICggbCA9PSByKXsKICAgICAgICAgICAgc3RbaV0gPSB2YWwgLSAnYScgKyAxOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGxsIG1pZCA9ICggbCArIHIgKSAvIDI7CiAgICAgICAgdXBkYXRlKDIgKiBpLCBsLCBtaWQsIHBvcywgdmFsKTsKICAgICAgICB1cGRhdGUoMiAqIGkgKyAxLCBtaWQgKyAxLCByLCBwb3MsIHZhbCk7CiAgICAgICAgc3RbaV0gPSAoKHN0WzIgKiBpXSAqIFBPV1tyIC0gbWlkXSkgJSBtb2QgKyBzdFsyICogaSArIDFdKSAlIG1vZDsKICAgIH0KICAgIGxsIGdldChsbCBpLCBsbCBsLCBsbCByLCBsbCB1LCBsbCB2KXsKICAgICAgICBpZiAoIHYgPCBsIHx8IHUgPiByIHx8IHUgPiB2KXsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIGlmICggdSA8PSBsICYmIHIgPD0gdil7CiAgICAgICAgICAgIHJldHVybiBzdFtpXTsKICAgICAgICB9CiAgICAgICAgbGwgbWlkID0gKGwgKyByKSAvIDI7CiAgICAgICAgcmV0dXJuIChnZXQoaSAqIDIsIGwsIG1pZCwgdSwgdikgKiBQT1dbbWF4KDBMTCwgbWluKHIsIHYpIC0gbWlkKV0gJSBtb2QgKyBnZXQoaSAqIDIgKyAxLCBtaWQgKyAxLCByLCB1LCB2KSkgJSBtb2Q7CiAgICB9Cn07CklUIHJlcywgc29sOwptYWluKCl7CiAgICBmYXN0OwogICAgY3JlYXRlKCk7CiAgICBjaW4gPj4gbiA+PiBxID4+IHJlcy5zOwogICAgc29sLnMgPSByZXMuczsKICAgIHNvbC5zID0gc29sLnM7CiAgICByZXZlcnNlKGFsbChyZXMucykpOwogICAgcmVzLnMgPSByZXMuczsKICAgIHJlcy5idWlsZCgxLCAxLCBuKTsgc29sLmJ1aWxkKDEsIDEsIG4pOwogICAgd2hpbGUocS0tKXsKICAgICAgICBsbCB0eXBlOwogICAgICAgIGNpbiA+PiB0eXBlOwogICAgICAgIGlmICggdHlwZSA9PSAxKXsKICAgICAgICAgICAgbGwgcG9zOyBjaGFyIHg7CiAgICAgICAgICAgIGNpbiA+PiBwb3MgPj4geDsKICAgICAgICAgICAgc29sLnVwZGF0ZSgxLCAxLCBuLCBwb3MsIHgpOwogICAgICAgICAgICByZXMudXBkYXRlKDEsIDEsIG4sIG4gLSBwb3MgKyAxLCB4KTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgbGwgeCwgeTsKICAgICAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICAgICAgbGwgaiA9IHNvbC5nZXQoMSwgMSwgbiwgeCwgeSk7CiAgICAgICAgICAgIGxsIGsgPSByZXMuZ2V0KDEsIDEsIG4sIG4gLSB5ICsgMSwgbiAtIHggKyAxKTsKICAgICAgICAgICAgaWYgKCBqID09IGsgKXsKICAgICAgICAgICAgICAgIGNvdXQgPDwgIllFUyIgPDwgZW5kbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgY291dCA8PCAiTk8iIDw8IGVuZGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0K