#include <bits/stdc++.h>
using namespace std;
inline int in() {
  char c = getchar();
  int neg = 1, x = 0;
  while (!isdigit(c)) (c == '-') ? neg = -1, c = getchar() : c = getchar();
  while (isdigit(c)) x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();
  return neg * x;
}
const int MAX = 2e5 + 5;
const long long p = 43;
const long long mod = 1e9 + 7;
int N, M, ptr, l, r, len;
bool ret;
char str[MAX];
set<long long> A, B;
long long H[26][MAX], pw[MAX];
inline long long GetHash(long long *H, int l, int r) {
  return (H[r] - H[l] * pw[r - l] % mod + mod) % mod;
}
int main() {
  N = in(), M = in(), scanf("%s", str + 1);
  pw[0] = 1;
  for (register int i = 1; i <= N + 1; i++) pw[i] = pw[i - 1] * p % mod;
  for (char c = 'a'; c <= 'z'; c++)
    for (register int i = 1; i <= N; i++)
      H[c - 'a'][i] = (H[c - 'a'][i - 1] * p % mod + (str[i] == c) + 1) % mod;
  while (M--) {
    ret = true;
    l = in() - 1, r = in() - 1, len = in();
    for (register int i = 0; i < 26; i++) {
      bool t = false;
      for (register int j = 0; j < 26; j++)
        t |= GetHash(H[i], l, l + len) == GetHash(H[j], r, r + len);
      ret &= t;
    }
    puts(ret ? "YES" : "NO");
  }
  return 0;
}
