#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define MAXN 5000
#define EPS 1e-4
#define INF 1e40

double dJ, D;
int n;

struct cable {
  double x1, y1, x2, y2, z, d;
} C[MAXN];

struct line {
  double x1,y1,x2,y2;
} L[2*MAXN];

void error() {
  fprintf(stderr, "Wrong input\n");
  exit(1);
}

int z_compare(struct cable *a, struct cable *b) {
  if (a->z<b->z) return -1;
  if (a->z>b->z) return 1;
  return 0;
}

double Len(double x, double y) {
  return sqrt(x*x+y*y);
}

int LinesIntersection(ax, ay, bx, by, cx, cy, dx, dy, ix, iy) 
  double ax, ay, bx, by, cx, cy, dx, dy;
  double *ix, *iy;
{
  double v1x, v1y, v2x, v2y;
  double D,t;
  
  v1x = bx - ax; v1y = by - ay;
  v2x = dx - cx; v2y = dy - cy;

  D = -v1x*v2y + v1y*v2x;
  if (fabs(D)<EPS) return 0;
  t = ( -(cx-ax)*v2y + (cy-ay)*v2x ) / D;
  *ix = ax + t*v1x;
  *iy = ay + t*v1y;
  return 1;
}

int LineCircleIntersection(ax, ay, bx, by, r, i1x, i1y, i2x, i2y)
  double ax, ay, bx, by, r;
  double *i1x, *i1y, *i2x, *i2y;
{
  double A,B,C,D,vx,vy;

  vx = bx - ax; vy = by - ay;
  A = vx*vx+vy*vy;
  B = 2*ax*vx + 2*ay*vy;
  C = ax*ax + ay*ay - r*r;
  D = B*B-4*A*C;
  if (D<EPS) return 0;
  *i1y = ay + vy*( (-B-sqrt(D))/(2*A) );
  *i1x = ax + vx*( (-B-sqrt(D))/(2*A) );
  *i2y = ay + vy*( (-B+sqrt(D))/(2*A) );
  *i2x = ax + vx*( (-B+sqrt(D))/(2*A) );
   
  return 2;
}

int CheckPoint(double x, double y, int a, int b) {
  double v;
  int i;

  if (x*x+y*y > D*D/4 + EPS) return 0;
  for (i=a; i<=b; i++) {
    v = ( (x-C[i].x1)*(C[i].y2-C[i].y1) - (y-C[i].y1)*(C[i].x2-C[i].x1) ) /
          Len( C[i].x2-C[i].x1, C[i].y2-C[i].y1 );
    if ( fabs(v) < C[i].d/2 - EPS ) return 0;
  }
  return 1;
}

int DoLayer(int a, int b) {
  int i, j, ns;
  double dx,dy,len;
  double x1,y1, x2,y2;
  
  if (CheckPoint(0.0,0.0,a,b)) return 1;
  
  for (j=0,i=a; i<=b; i++) {
    dx = C[i].y2-C[i].y1; dy = C[i].x1-C[i].x2;
    len = Len(dx,dy);
    dx /= len; dy /= len;
    dx *= C[i].d/2; dy *= C[i].d/2;
    if (dx<0) {
      dx = -dx; dy = -dy;
    }

    L[j].x1 = C[i].x1-dx;   L[j].y1 = C[i].y1-dy;
    L[j].x2 = C[i].x2-dx;   L[j].y2 = C[i].y2-dy;    
    j++;
    
    L[j].x1 = C[i].x1+dx;   L[j].y1 = C[i].y1+dy;
    L[j].x2 = C[i].x2+dx;   L[j].y2 = C[i].y2+dy;
    j++;
  }

  ns = j;
  for (i=0; i<ns; i++) {
    for (j=i+1; j<ns; j++) {
      if (LinesIntersection(L[i].x1, L[i].y1, L[i].x2, L[i].y2, L[j].x1, L[j].y1, L[j].x2, L[j].y2, &x1, &y1)) {
        if (CheckPoint(x1,y1,a,b)) return 1;
      }
    }
    if (LineCircleIntersection(L[i].x1, L[i].y1, L[i].x2, L[i].y2, D/2, &x1, &y1, &x2, &y2)) {
      if (CheckPoint(x1,y1,a,b)) return 1;
      if (CheckPoint(x2,y2,a,b)) return 1;
    }
  }

  return 0;
}

void DoPipe() {
  int i,j;
  double z1, z2, max, max2;
  
  scanf("%lf %d ", &D, &n);
  D -= dJ;
  for (i=0; i<n; i++) {
    scanf("%lf %lf %lf %lf %lf %lf %lf ", &(C[i].x1), &(C[i].y1), &z1, &(C[i].x2), &(C[i].y2), &z2, &(C[i].d));
    if (z1!=z2) error();
    C[i].z = z1;
    C[i].d += dJ;
  }
  qsort(C, n, sizeof(struct cable), z_compare);
  
  max = max2 = 0; z2=-INF; j = 0;
  for (i=0; i<n; i++) {
    if (C[i].d>max) max = C[i].d;
    if ( (i==n-1)||(C[i].z!=C[i+1].z) ) {
      if ( z2+max2/2+max/2 > C[i].z ) error();
      z2 = C[i].z;
      max2 = max;
      max = 0;
      if (!DoLayer(j,i)) {
        printf("NO\n");
        return;
      }
      j = i+1;
    }
  }
  printf("YES\n");
}

int main() {
  int i,p;
  scanf("%lf %d ", &dJ, &p);
  for (i=0; i<p; i++) DoPipe();
  return 0;
}
