#include<iostream>
#include<string>
using namespace std;
// h[i]前i个字符的hash值
// 字符串变成一个p进制数字,体现了字符+顺序,需要确保不同的字符串对应不同的数字
// P = 131 或 13331 Q=2^64,在99%的情况下不会出现冲突
// 使用场景: 两个字符串的子串是否相同
typedef unsigned long long ULL;
const int N = 100010, P = 131;
int n, m;
char str[N];
ULL p[N], h[N];
ULL get(int l, int r)
{
//区间和公式 h[l, r] = h[r]−h[l−1]×P[r−l + 1]
return h[r] - h[l - 1] * p[r - l + 1];
}
int main()
{
cin >> n >> m;
//从字符串第一个位置开始存字符
for (int i = 1; i <= n; i++)cin >> str[i];
p[0] = 1;
//字符串哈希 unsigned long long 不用取模(溢出就等于取模)
/*
字符串哈希 十进制模拟
i = 0 1 2 3 4
s[i] = 0 9 6 3 5
p[i] = 1 10 100 1000 10000
h[i] = 0 9 96 963 9635
*/
for (int i = 1; i <= n; i++)
{
//前缀和公式 h[i + 1] = h[i]×P + s[i]h[i + 1] = h[i]×P + s[i] i∈[0, n−1]i∈[0, n−1];
p[i] = p[i - 1] * P;
h[i] = h[i - 1] * P + str[i];//前缀和求整个字符串的哈希值
}
while (m--)
{
int l1, r1, l2, r2;
cin >> l1 >> r1 >> l2 >> r2;
if (get(l1, r1) == get(l2, r2))cout << "Yes";
else cout << "No";
}
return 0;
}