#include <iostream>
#include <complex>
#include <vector>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;

#define EPS 1e-10
typedef complex<double> P;

struct L : public vector<P> {
  L(const P &a, const P &b) {
    push_back(a); push_back(b);
  }
};

struct C {
  P p; double r;
  C(const P &p, double r) : p(p), r(r) { }
};

double cross(const P& a, const P& b) {
  return imag(conj(a)*b);
}

double dot(const P& a, const P& b) {
  return real(conj(a)*b);
}

double dist(const P& a, const P& b)
{
	return sqrt((a.real()-b.real())*(a.real()-b.real())+(a.imag()-b.imag())*(a.imag()-b.imag()));
}

bool isIntoC(const L& l, const C& c)
{
	return dist(l[0], c.p) < c.r+EPS && dist(l[1], c.p) < c.r+EPS;
}

bool intersectSC(const L& l, const C& c)
{
	if(isIntoC(l, c)) return false;
	
	double vc=dot(l[1]-l[0], c.p-l[0]);
	if(vc<0)
	{
		double dif=c.r-dist(l[0], c.p);
		return dif+EPS > 0;
	}
	
	double vv=dot(l[1]-l[0], l[1]-l[0]);
	
	if(vc > vv)
	{
		double d=dist(l[1], c.p);
		double dif=c.r*c.r-d*d;
		
		return dif+EPS > 0;
	}
	
	double cc=dot(c.p-l[0], c.p-l[0]);
	double dif=c.r*c.r-(cc-(vc/vv)*vc);
	
	return dif+EPS > 0;
}

class UFO
{
public:
	C c;
	int v;
	double d,dx,dy;
	UFO(C c, int v, double d, double dx, double dy)
	:c(c),v(v),d(d),dx(dx),dy(dy)
	{}
	
	bool operator<(const UFO& u) const
	{
		return d>u.d;
	}
};

int main()
{
	int R,N;
	while(cin >> R >> N,(R||N))
	{
		priority_queue<UFO> q;
		while(N--)
		{
			int x,y,r,v;
			cin >> x >> y >> r >> v;
			double dx=1.0*x/sqrt(x*x+y*y), dy=1.0*y/sqrt(x*x+y*y);
			q.push(UFO(C(P(x-dx,y-dy),r),v, dist(P(0,0), P(x,y))-v, dx,dy));
		}
		
		int cnt=0;
		while(!q.empty())
		{
			UFO u=q.top(); q.pop();
			if(u.d < R+EPS)
			{
				cnt++;
				continue;
			}
			
			priority_queue<UFO> tq;
			L s(P(0,0),P(u.c.p.real()*1000, u.c.p.imag()*1000));
			while(!q.empty())
			{
				UFO uf=q.top(); q.pop();
				if(intersectSC(s,uf.c)) continue;
				tq.push(UFO(C(P(uf.c.p.real()-uf.dx, uf.c.p.imag()-uf.dy), uf.c.r), uf.v, uf.d-uf.v, uf.dx, uf.dy));
			}
			
			while(!tq.empty())
			{
				q.push(tq.top()); tq.pop();
			}
		}
		
		cout << cnt << endl;
	}
}