#include<bits/stdc++.h>
#define MX 301
#define rep(i,a,b) for(int i(a);i<=(b);++i)
#define req(i,a,b) for(int i(a);i>=(b);--i)
using namespace std;
char buf[1<<23],*p1=buf,*p2=buf,ubuf[1<<23],*u=ubuf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
inline void read(int &x)
{
x=0;
char ch=getchar();
while(ch<48||ch>57) ch=getchar();
while(48<=ch&&ch<=57) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
}
struct Point{int x,y;};struct Segment{Point a,b;};
inline int orientation(Point p,Point q,Point r)
{
int val=(q.y-p.y)*(r.x-q.x)-(q.x-p.x)*(r.y-q.y);
return !val?0:val>0?1:2;
}
inline int on_seg(Point p,Point q,Point r)
{
if(q.x<=max(p.x,r.x)&&q.x>=min(p.x,r.x)&&q.y<=max(p.y,r.y)&&q.y>=min(p.y,r.y)) return 1;
return 0;
}
inline int seg_intersect(Segment s1,Segment s2)
{
int o1=orientation(s1.a,s1.b,s2.a);
int o2=orientation(s1.a,s1.b,s2.b);
int o3=orientation(s2.a,s2.b,s1.a);
int o4=orientation(s2.a,s2.b,s1.b);
if(o1!=o2&&o3!=o4) return 1;
if(o1==0&&on_seg(s1.a,s2.a,s1.b)) return 1;
if(o2==0&&on_seg(s1.a,s2.b,s1.b)) return 1;
if(o3==0&&on_seg(s2.a,s1.a,s2.b)) return 1;
if(o4==0&&on_seg(s2.a,s1.b,s2.b)) return 1;
return 0;
}
inline int seg_intersect(Point p1,Point q1,Point p2,Point q2){Segment s1={p1,q1},s2={p2,q2};return seg_intersect(s1,s2);}
vector<pair<int,int>> get_cell(int x_1,int y_1,int x_2,int y_2)
{
vector<pair<int,int>> res;
double dx=x_2-x_1,dy=y_2-y_1;
int gx=x_1/100,gy=y_1/100,gx1=x_2/100,gy1=y_2/100;
res.emplace_back(gx,gy);
if(gx==gx1&&gy==gy1) return res;
int stx=dx>0?1:(dx<0?-1:0),sty=dy>0?1:(dy<0?-1:0);
double delta_x=stx!=0?100.0/abs(dx):1e18,delta_y=sty!=0?100.0/abs(dy):1e18;
double nxt_x=(gx+(stx>0))*100.0,nxt_y=(gy+(sty>0))*100.0;
double max_x=stx!=0?(nxt_x-x_1)/dx:1e18,max_y=sty!=0?(nxt_y-y_1)/dy:1e18;
while(gx!=gx1||gy!=gy1)
{
if(max_x<max_y) gx+=stx,max_x+=delta_x;
else gy+=sty,max_y+=delta_y;
if(gx<0||gx>=MX||gy<0||gy>=MX) break;
res.emplace_back(gx,gy);
}
return res;
}
int n,q;
Point p[200001];
Segment seg[200001];
vector<pair<int,int>> res;
signed main()
{
read(n),read(q);
rep(i,1,n) read(p[i].x),read(p[i].y);
rep(i,1,n) seg[i]={p[i],p[i%n+1]};
vector<basic_string<int>> a(MX*MX);
rep(i,1,n)
{
res=get_cell(seg[i].a.x,seg[i].a.y,seg[i].b.x,seg[i].b.y);
for(auto [x,y]:res) if(x>=0&&x<MX&&y>=0&&y<MX) a[x*MX+y]+=i;
}
while(q--)
{
Point p,q; read(p.x),read(p.y),read(q.x),read(q.y);
res=get_cell(p.x,p.y,q.x,q.y);
int found=0,cnt=0;
for(auto [x,y]:res)
{
if(x<0||x>=MX||y<0||y>=MX) continue;
for(auto i:a[x*MX+y]) if(seg_intersect(p,q,seg[i].a,seg[i].b)) {found=1;break;}
if(found) break;
}
puts(found?"YES":"NO");
}
return 0;
}