#include using namespace std; const int S = 70; class segtree { public: vector tree; int n; segtree(int n): n(n) { tree = vector(n * 2 - 1, -1); } void modify(int x, int l, int r, int p, int v) { tree[x] = max(tree[x], v); if (l != r) { int y = l + r >> 1, z = x + (y - l + 1 << 1); if (p <= y) { modify(x + 1, l, y, p, v); } else { modify(z, y + 1, r, p, v); } } } int query(int x, int l, int r, int ll, int rr) { if (ll <= l && r <= rr) { return tree[x]; } else { int y = l + r >> 1, z = x + (y - l + 1 << 1); if (rr <= y) { return query(x + 1, l, y, ll, rr); } else if (ll > y) { return query(z, y + 1, r, ll, rr); } else { return max(query(x + 1, l, y, ll, rr), query(z, y + 1, r, ll, rr)); } } } void modify(int p, int v) { modify(0, 0, n - 1, p, v); } int query(int l, int r) { return query(0, 0, n - 1, l, r); } }; int main() { #ifdef wxh010910 freopen("input.txt", "r", stdin); #endif int tt; scanf("%d", &tt); while (tt--) { int n, m; scanf("%d %d", &n, &m); vector from(m), to(m); vector> modifies(n); for (int i = 0; i < m; ++i) { scanf("%d %d", &from[i], &to[i]); --from[i]; --to[i]; if (from[i] > to[i]) { swap(from[i], to[i]); } modifies[to[i]].push_back(from[i]); } int q; scanf("%d", &q); vector ans(q, true); vector>> ranges(q); vector>> queries(n); for (int qq = 0; qq < q; ++qq) { int sz; scanf("%d", &sz); ranges[qq].resize(sz); for (int i = 0; i < sz; ++i) { scanf("%d %d", &ranges[qq][i].first, &ranges[qq][i].second); --ranges[qq][i].first; --ranges[qq][i].second; } if (sz >= S) { vector inside(n); for (int i = 0; i < sz; ++i) { for (int j = ranges[qq][i].first; j <= ranges[qq][i].second; ++j) { inside[j] = true; } } for (int i = 0; i < m; ++i) { if (inside[from[i]] && inside[to[i]]) { ans[qq] = false; break; } } } else { sort(ranges[qq].begin(), ranges[qq].end()); for (int i = 0; i < sz; ++i) { queries[ranges[qq][i].second].emplace_back(qq, i); } } } segtree seg(n); for (int i = 0; i < n; ++i) { for (auto j : modifies[i]) { seg.modify(j, i); } for (auto p : queries[i]) { int qq = p.first, id = p.second; if (ans[qq]) { for (int j = 0; j <= id; ++j) { if (seg.query(ranges[qq][j].first, ranges[qq][j].second) >= ranges[qq][id].first) { ans[qq] = false; break; } } } } } for (int i = 0; i < q; ++i) { puts(ans[i] ? "YES" : "NO"); } } return 0; }