/*#include<stdio.h>
long x[804],y[804];
int n,m,xx,yy,np=0,i,j;
long long a=0,b;
int main()
{FILE *f=fopen("poligon.in","r"),*g=fopen("poligon.out","w");
fscanf(f,"%d %d\n",&n,&m);
for(i=1;i<=n;++i)
fscanf(f,"%ld %ld\n",&x[i],&y[i]);
for(i=2;i<n;++i)
a+=(x[i]-x[1])*(y[i+1]-y[1])-(x[i+1]-x[1])*(y[i]-y[1]);
for(i=1;i<=m;++i)
{fscanf(f,"%d %d\n",&xx,&yy);
b=0;
for(j=1;j<n;++j)
b+=(x[i]-xx)*(y[i+1]-yy)-(x[i+1]-xx)*(y[i]-yy);
b+=(x[n]-xx)*(y[1]-yy)-(x[1]-xx)*(y[n]-yy);
if(b==a) np++;
}
fprintf(g,"%d\n",np);
fclose(f);
fclose(g);
return 0;
}*/
#include<stdio.h>
int x[801],y[801],n;
inline int sign(long long x)
{return (x<0)?(-1):(x>0)?(1):(0);
}
inline long long dotprod(int x0,int y0, int x1, int y1,int x2,int y2)
{return (long long)(x1-x0)*(y2-y0)-(long long)(x2-x0)*(y1-y0);
}
int in_poli(int xx,int yy)
{int semn=sign(dotprod(xx,yy,x[1],y[1],x[2],y[2])),i,s;
for(i=3;i<=n;++i)
{s=sign(dotprod(xx,yy,x[i-1],y[i-1],x[i],y[i]));
if(s==0) return 1;
if(s!=semn) return 0;
}
s=sign(dotprod(xx,yy,x[n],y[n],x[1],y[1]));
if(s==0) return 1;
if(s!=semn) return 0;
return 1;
}
int main()
{FILE *f=fopen("poligon.in","r"),*g=fopen("poligon.out","w");
int m,xx,yy,np=0,i;
fscanf(f,"%d %d\n",&n,&m);
for(i=1;i<=n;++i) fscanf(f,"%d %d\n",&x[i],&y[i]);
for(i=1;i<=m;++i)
{fscanf(f,"%d %d\n",&xx,&yy);
np+=in_poli(xx,yy);
}
fprintf(g,"%d\n",np);
fclose(f);
fclose(g);
return 0;
}