#include <bits/stdc++.h>
using namespace std;
const int maxn = 200010;
const int seed = 131;
const int Mod = 1e9 + 7;
unsigned long long Hash[26][maxn], g[maxn];
int a[26][maxn], N;
char c[maxn];
unsigned long long gethash(int chr, int x, int Len) {
  return ((Hash[chr][x + Len - 1] - Hash[chr][x - 1] * g[Len] % Mod) + Mod) %
         Mod;
}
bool check(int x, int y, int Len) {
  int i, pos;
  for (i = 0; i < 26; i++) {
    pos = lower_bound(a[i] + 1, a[i] + 1 + a[i][0], x) - a[i];
    if (pos > a[i][0] || a[i][pos] > x + Len - 1) continue;
    if (gethash(i, x, Len) != gethash(c[y - x + a[i][pos]] - 'a', y, Len))
      return false;
  }
  return true;
}
int main() {
  int Q, x, y, len, i, j;
  scanf("%d%d", &N, &Q);
  scanf("%s", c + 1);
  g[0] = 1;
  for (i = 1; i <= N; i++) {
    g[i] = g[i - 1] * seed % Mod;
    for (j = 0; j < 26; j++)
      Hash[j][i] = (Hash[j][i - 1] * seed + (c[i] - 'a' == j)) % Mod;
    a[c[i] - 'a'][++a[c[i] - 'a'][0]] = i;
  }
  while (Q--) {
    scanf("%d%d%d", &x, &y, &len);
    if (check(x, y, len))
      printf("YES\n");
    else
      printf("NO\n");
  }
  return 0;
}
