#include<iostream>
using namespace std;
typedef unsigned long long LL;//最大2^64次方
const int N = 10010,p = 13331;
int n,m;
int l1,r1,l2,r2;
char str[N];
LL h[N],pk[N];
LL get(int l,int r)
{
return h[r] - h[l - 1]*pk[r - l + 1];
}
//返回l到r之间的子字符串hash值
int main()
{
cin>>n>>m>>str + 1;
pk[0] = 1;
for(int i = 1;i <= n;i++)
{
pk[i] = pk[i - 1]*p;//初始化pk数组,存放p^i次方
h[i] = h[i - 1]*p + str[i];//字符串数值化
}
while(m--)
{
cin>>l1>>r1>>r2>>r2;
if(get(l1,r1) == get(l2,r2))cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
return 0;
}