#include <cstdio>
#include <iostream>
#include <complex>
#include <vector>
#include <utility>
#include <algorithm>
#include <cassert>
#include <queue>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
const double EPS = 1e-10;
typedef complex<double> p_t;
double dot(const p_t &p, const p_t &q) { return real(conj(p) * q); }
double det(const p_t &p, const p_t &q) { return imag(conj(p) * q); }
double dist_l_p(const p_t &p, const p_t &a, const p_t &u) {
return abs(det(p - a, u)) / abs(u);
}
pair<double, double> cross_l_c(p_t a, const p_t &u, const p_t &c, double r) {
a -= c;
double b = real(u * conj(a)), d = b * b - norm(u) * (norm(a) - r * r);
d = max(d, 0.0);
return make_pair((-b + sqrt(d)) / norm(u), (-b - sqrt(d)) / norm(u));
}
pair<p_t, p_t> cross_c_c(const p_t &c, double r, const p_t &d, double s) {
double di = abs(c - d);
double l = ((r * r - s * s) / di + di) / 2.0, n = sqrt(r * r - l * l);
p_t e = c + (d - c) * l / di, p = (d - c) * n / di * p_t(0.0, -1.0);
return make_pair(e + p, e - p);
}
int N, M;
p_t C[110];
double R[110];
int V;
vector<pair<double, int>> vs[110][2];
vector<vector<int> > adj;
bool solve(p_t P, p_t Q) {
P += p_t(0.0001, 0.0001);
Q += p_t(0.0001, 0.0001);
rep (i, N) {
bool p = abs(P - C[i]) < R[i];
bool q = abs(Q - C[i]) < R[i];
if (p != q) return false;
}
V = 0;
rep (i, N) {
vs[i][0].clear();
vs[i][1].clear();
}
rep (i, N) rep (j, i) {
double d = abs(C[i] - C[j]);
if (d > R[i] + R[j] || d < fabs(R[i] - R[j])) continue;
pair<p_t, p_t> xs = cross_c_c(C[i], R[i], C[j], R[j]);
rep (k, 2) {
p_t x = (k == 0 ? xs.first : xs.second);
int v0 = V;
V += 4;
{ // From |i|
double th = arg(x - C[i]);
vs[i][1].push_back(make_pair(th, v0 + 0));
vs[i][1].push_back(make_pair(th, v0 + 1));
vs[i][0].push_back(make_pair(th, v0 + 2));
vs[i][0].push_back(make_pair(th, v0 + 3));
}
{ // From |j|
double th = arg(x - C[j]);
vs[j][1].push_back(make_pair(th, v0 + 1));
vs[j][1].push_back(make_pair(th, v0 + 3));
vs[j][0].push_back(make_pair(th, v0 + 0));
vs[j][0].push_back(make_pair(th, v0 + 2));
}
}
}
int V2 = V;
vector<pair<double, int> > s2v;
rep (i, N) {
double d = dist_l_p(C[i], P, Q - P);
if (d > R[i] - EPS) continue;
pair<double, double> ss = cross_l_c(P, Q - P, C[i], R[i]);
if (ss.first > ss.second) swap(ss.first, ss.second);
rep (k, 2) {
double s = (k == 0 ? ss.first : ss.second);
if (s < 0 || 1 < s) continue;
int v0 = V;
V += 2;
p_t x = P + s * (Q - P);
double th = arg(x - C[i]);
vs[i][(k == 0 ? 1 : 0)].push_back(make_pair(th, v0 + 0));
vs[i][(k == 0 ? 0 : 1)].push_back(make_pair(th, v0 + 1));
s2v.push_back(make_pair(s, v0 + 0));
s2v.push_back(make_pair(s, v0 + 1));
}
}
int vp = V++;
int vq = V++;
s2v.push_back(make_pair(0, vp));
s2v.push_back(make_pair(1, vq));
adj.clear();
adj.resize(V);
rep (i, N) {
rep (k, 2) {
sort(vs[i][k].begin(), vs[i][k].end());
rep (j, vs[i][k].size()) {
int v = vs[i][k][j].second;
int w = vs[i][k][(j + 1) % vs[i][k].size()].second;
if (v < V2 && v / 4 == w / 4) continue;
adj[v].push_back(w);
adj[w].push_back(v);
}
}
}
sort(s2v.begin(), s2v.end());
assert(s2v.size() % 2 == 0);
for (int i = 0; i < (int)s2v.size(); i += 2) {
int v = s2v[i].second;
int w = s2v[i + 1].second;
adj[v].push_back(w);
adj[w].push_back(v);
}
queue<int> que;
vector<bool> vis(V);
que.push(vp);
vis[vp] = true;
while (!que.empty()) {
int v = que.front();
que.pop();
if (v == vq) return true;
for (int w : adj[v]) {
if (vis[w]) continue;
vis[w] = true;
que.push(w);
}
}
return false;
}
int main() {
for (;;) {
scanf("%d%d", &N, &M);
if (N == 0 && M == 0) return 0;
rep (i, N) {
double x, y;
scanf("%lf%lf%lf", &x, &y, &R[i]);
C[i] = p_t(x, y);
}
rep (i, M) {
double x1, y1, x2, y2;
scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
printf("%s%c",
solve(p_t(x1, y1), p_t(x2, y2)) ? "YES" : "NO",
i == M - 1 ? '\n' : ' ');
}
}
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y29tcGxleD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxjYXNzZXJ0PgojaW5jbHVkZSA8cXVldWU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIHJlcChpLCBuKSBmb3IgKGludCBpID0gMDsgaSA8IChpbnQpKG4pOyBpKyspCgpjb25zdCBkb3VibGUgRVBTID0gMWUtMTA7CnR5cGVkZWYgY29tcGxleDxkb3VibGU+IHBfdDsKCmRvdWJsZSBkb3QoY29uc3QgcF90ICZwLCBjb25zdCBwX3QgJnEpIHsgcmV0dXJuIHJlYWwoY29uaihwKSAqIHEpOyB9CmRvdWJsZSBkZXQoY29uc3QgcF90ICZwLCBjb25zdCBwX3QgJnEpIHsgcmV0dXJuIGltYWcoY29uaihwKSAqIHEpOyB9Cgpkb3VibGUgZGlzdF9sX3AoY29uc3QgcF90ICZwLCBjb25zdCBwX3QgJmEsIGNvbnN0IHBfdCAmdSkgewogIHJldHVybiBhYnMoZGV0KHAgLSBhLCB1KSkgLyBhYnModSk7Cn0KCnBhaXI8ZG91YmxlLCBkb3VibGU+IGNyb3NzX2xfYyhwX3QgYSwgY29uc3QgcF90ICZ1LCBjb25zdCBwX3QgJmMsIGRvdWJsZSByKSB7CiAgYSAtPSBjOwogIGRvdWJsZSBiID0gcmVhbCh1ICogY29uaihhKSksIGQgPSBiICogYiAtIG5vcm0odSkgKiAobm9ybShhKSAtIHIgKiByKTsKICBkID0gbWF4KGQsIDAuMCk7CiAgcmV0dXJuIG1ha2VfcGFpcigoLWIgKyBzcXJ0KGQpKSAvIG5vcm0odSksICgtYiAtIHNxcnQoZCkpIC8gbm9ybSh1KSk7Cn0KCnBhaXI8cF90LCBwX3Q+IGNyb3NzX2NfYyhjb25zdCBwX3QgJmMsIGRvdWJsZSByLCBjb25zdCBwX3QgJmQsIGRvdWJsZSBzKSB7CiAgZG91YmxlIGRpID0gYWJzKGMgLSBkKTsKICBkb3VibGUgbCA9ICgociAqIHIgLSBzICogcykgLyBkaSArIGRpKSAvIDIuMCwgbiA9IHNxcnQociAqIHIgLSBsICogbCk7CiAgcF90IGUgPSBjICsgKGQgLSBjKSAqIGwgLyBkaSwgcCA9IChkIC0gYykgKiBuIC8gZGkgKiBwX3QoMC4wLCAtMS4wKTsKICByZXR1cm4gbWFrZV9wYWlyKGUgKyBwLCBlIC0gcCk7Cn0KCmludCBOLCBNOwpwX3QgQ1sxMTBdOwpkb3VibGUgUlsxMTBdOwoKaW50IFY7CnZlY3RvcjxwYWlyPGRvdWJsZSwgaW50Pj4gdnNbMTEwXVsyXTsKCnZlY3Rvcjx2ZWN0b3I8aW50PiA+IGFkajsKCmJvb2wgc29sdmUocF90IFAsIHBfdCBRKSB7CiAgUCArPSBwX3QoMC4wMDAxLCAwLjAwMDEpOwogIFEgKz0gcF90KDAuMDAwMSwgMC4wMDAxKTsKCiAgcmVwIChpLCBOKSB7CiAgICBib29sIHAgPSBhYnMoUCAtIENbaV0pIDwgUltpXTsKICAgIGJvb2wgcSA9IGFicyhRIC0gQ1tpXSkgPCBSW2ldOwogICAgaWYgKHAgIT0gcSkgcmV0dXJuIGZhbHNlOwogIH0KCiAgViA9IDA7CiAgcmVwIChpLCBOKSB7CiAgICB2c1tpXVswXS5jbGVhcigpOwogICAgdnNbaV1bMV0uY2xlYXIoKTsKICB9CgogIHJlcCAoaSwgTikgcmVwIChqLCBpKSB7CiAgICBkb3VibGUgZCA9IGFicyhDW2ldIC0gQ1tqXSk7CiAgICBpZiAoZCA+IFJbaV0gKyBSW2pdIHx8IGQgPCBmYWJzKFJbaV0gLSBSW2pdKSkgY29udGludWU7CgogICAgcGFpcjxwX3QsIHBfdD4geHMgPSBjcm9zc19jX2MoQ1tpXSwgUltpXSwgQ1tqXSwgUltqXSk7CiAgICByZXAgKGssIDIpIHsKICAgICAgcF90IHggPSAoayA9PSAwID8geHMuZmlyc3QgOiB4cy5zZWNvbmQpOwogICAgICBpbnQgdjAgPSBWOwogICAgICBWICs9IDQ7CgogICAgICB7IC8vIEZyb20gfGl8CiAgICAgICAgZG91YmxlIHRoID0gYXJnKHggLSBDW2ldKTsKICAgICAgICB2c1tpXVsxXS5wdXNoX2JhY2sobWFrZV9wYWlyKHRoLCB2MCArIDApKTsKICAgICAgICB2c1tpXVsxXS5wdXNoX2JhY2sobWFrZV9wYWlyKHRoLCB2MCArIDEpKTsKICAgICAgICB2c1tpXVswXS5wdXNoX2JhY2sobWFrZV9wYWlyKHRoLCB2MCArIDIpKTsKICAgICAgICB2c1tpXVswXS5wdXNoX2JhY2sobWFrZV9wYWlyKHRoLCB2MCArIDMpKTsKICAgICAgfQogICAgICB7IC8vIEZyb20gfGp8CiAgICAgICAgZG91YmxlIHRoID0gYXJnKHggLSBDW2pdKTsKICAgICAgICB2c1tqXVsxXS5wdXNoX2JhY2sobWFrZV9wYWlyKHRoLCB2MCArIDEpKTsKICAgICAgICB2c1tqXVsxXS5wdXNoX2JhY2sobWFrZV9wYWlyKHRoLCB2MCArIDMpKTsKICAgICAgICB2c1tqXVswXS5wdXNoX2JhY2sobWFrZV9wYWlyKHRoLCB2MCArIDApKTsKICAgICAgICB2c1tqXVswXS5wdXNoX2JhY2sobWFrZV9wYWlyKHRoLCB2MCArIDIpKTsKICAgICAgfQogICAgfQogIH0KCiAgaW50IFYyID0gVjsKICB2ZWN0b3I8cGFpcjxkb3VibGUsIGludD4gPiBzMnY7CiAgcmVwIChpLCBOKSB7CiAgICBkb3VibGUgZCA9IGRpc3RfbF9wKENbaV0sIFAsIFEgLSBQKTsKICAgIGlmIChkID4gUltpXSAtIEVQUykgY29udGludWU7CiAgICBwYWlyPGRvdWJsZSwgZG91YmxlPiBzcyA9IGNyb3NzX2xfYyhQLCBRIC0gUCwgQ1tpXSwgUltpXSk7CiAgICBpZiAoc3MuZmlyc3QgPiBzcy5zZWNvbmQpIHN3YXAoc3MuZmlyc3QsIHNzLnNlY29uZCk7CgogICAgcmVwIChrLCAyKSB7CiAgICAgIGRvdWJsZSBzID0gKGsgPT0gMCA/IHNzLmZpcnN0IDogc3Muc2Vjb25kKTsKICAgICAgaWYgKHMgPCAwIHx8IDEgPCBzKSBjb250aW51ZTsKICAgICAgaW50IHYwID0gVjsKICAgICAgViArPSAyOwoKICAgICAgcF90IHggPSBQICsgcyAqIChRIC0gUCk7CiAgICAgIGRvdWJsZSB0aCA9IGFyZyh4IC0gQ1tpXSk7CiAgICAgIHZzW2ldWyhrID09IDAgPyAxIDogMCldLnB1c2hfYmFjayhtYWtlX3BhaXIodGgsIHYwICsgMCkpOwogICAgICB2c1tpXVsoayA9PSAwID8gMCA6IDEpXS5wdXNoX2JhY2sobWFrZV9wYWlyKHRoLCB2MCArIDEpKTsKICAgICAgczJ2LnB1c2hfYmFjayhtYWtlX3BhaXIocywgdjAgKyAwKSk7CiAgICAgIHMydi5wdXNoX2JhY2sobWFrZV9wYWlyKHMsIHYwICsgMSkpOwogICAgfQogIH0KICBpbnQgdnAgPSBWKys7CiAgaW50IHZxID0gVisrOwogIHMydi5wdXNoX2JhY2sobWFrZV9wYWlyKDAsIHZwKSk7CiAgczJ2LnB1c2hfYmFjayhtYWtlX3BhaXIoMSwgdnEpKTsKICBhZGouY2xlYXIoKTsKICBhZGoucmVzaXplKFYpOwogIHJlcCAoaSwgTikgewogICAgcmVwIChrLCAyKSB7CiAgICAgIHNvcnQodnNbaV1ba10uYmVnaW4oKSwgdnNbaV1ba10uZW5kKCkpOwogICAgICByZXAgKGosIHZzW2ldW2tdLnNpemUoKSkgewogICAgICAgIGludCB2ID0gdnNbaV1ba11bal0uc2Vjb25kOwogICAgICAgIGludCB3ID0gdnNbaV1ba11bKGogKyAxKSAlIHZzW2ldW2tdLnNpemUoKV0uc2Vjb25kOwogICAgICAgIGlmICh2IDwgVjIgJiYgdiAvIDQgPT0gdyAvIDQpIGNvbnRpbnVlOwogICAgICAgIGFkalt2XS5wdXNoX2JhY2sodyk7CiAgICAgICAgYWRqW3ddLnB1c2hfYmFjayh2KTsKICAgICAgfQogICAgfQogIH0KCiAgc29ydChzMnYuYmVnaW4oKSwgczJ2LmVuZCgpKTsKICBhc3NlcnQoczJ2LnNpemUoKSAlIDIgPT0gMCk7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50KXMydi5zaXplKCk7IGkgKz0gMikgewogICAgaW50IHYgPSBzMnZbaV0uc2Vjb25kOwogICAgaW50IHcgPSBzMnZbaSArIDFdLnNlY29uZDsKICAgIGFkalt2XS5wdXNoX2JhY2sodyk7CiAgICBhZGpbd10ucHVzaF9iYWNrKHYpOwogIH0KCiAgcXVldWU8aW50PiBxdWU7CiAgdmVjdG9yPGJvb2w+IHZpcyhWKTsKICBxdWUucHVzaCh2cCk7CiAgdmlzW3ZwXSA9IHRydWU7CiAgd2hpbGUgKCFxdWUuZW1wdHkoKSkgewogICAgaW50IHYgPSBxdWUuZnJvbnQoKTsKICAgIHF1ZS5wb3AoKTsKICAgIGlmICh2ID09IHZxKSByZXR1cm4gdHJ1ZTsKCiAgICBmb3IgKGludCB3IDogYWRqW3ZdKSB7CiAgICAgIGlmICh2aXNbd10pIGNvbnRpbnVlOwogICAgICB2aXNbd10gPSB0cnVlOwogICAgICBxdWUucHVzaCh3KTsKICAgIH0KICB9CgogIHJldHVybiBmYWxzZTsKfQoKaW50IG1haW4oKSB7CiAgZm9yICg7OykgewogICAgc2NhbmYoIiVkJWQiLCAmTiwgJk0pOwogICAgaWYgKE4gPT0gMCAmJiBNID09IDApIHJldHVybiAwOwoKICAgIHJlcCAoaSwgTikgewogICAgICBkb3VibGUgeCwgeTsKICAgICAgc2NhbmYoIiVsZiVsZiVsZiIsICZ4LCAmeSwgJlJbaV0pOwogICAgICBDW2ldID0gcF90KHgsIHkpOwogICAgfQoKICAgIHJlcCAoaSwgTSkgewogICAgICBkb3VibGUgeDEsIHkxLCB4MiwgeTI7CiAgICAgIHNjYW5mKCIlbGYlbGYlbGYlbGYiLCAmeDEsICZ5MSwgJngyLCAmeTIpOwogICAgICBwcmludGYoIiVzJWMiLAogICAgICAgICAgICAgc29sdmUocF90KHgxLCB5MSksIHBfdCh4MiwgeTIpKSA/ICJZRVMiIDogIk5PIiwKICAgICAgICAgICAgIGkgPT0gTSAtIDEgPyAnXG4nIDogJyAnKTsKICAgIH0KICB9Cn0K