/* -*- coding: utf-8 -*- * * 3560.cc: No.3560 Giant Salamander - yukicoder */ #include #include using namespace std; /* constant */ const int MAX_M = 200000; /* typedef */ /* global variables */ int as[MAX_M], bs[MAX_M]; /* subroutines */ int check(int n, int m, int d) { int di = d; for (int i = 0; i < m; i++) { if (di + 1 > bs[i]) return -1; int i1 = (i + 1) % m; int a1 = (i1 > 0) ? as[i1] : as[i1] + n; di = (a1 - as[i] - 1) - (bs[i] - (di + 1)); if (di < 0) return 1; } return 0; } /* main */ int main() { int tn; scanf("%d", &tn); while (tn--) { int n, m; scanf("%d%d", &n, &m); for (int i = 0; i < m; i++) scanf("%d%d", as + i, bs + i), as[i]--; bool ok = true; for (int i = 0; ok && i < m; i++) { int i0 = (i + m - 1) % m, i1 = (i + 1) % m; int a0 = (as[i0] < as[i]) ? as[i0] : as[i0] - n; int a1 = (as[i] < as[i1]) ? as[i1] : as[i1] + n; ok = ((a1 - as[i] + 1 <= bs[i] + bs[i1]) && (a1 - a0 - 1 >= bs[i])); } if (! ok) { puts("No"); continue; } int d0 = 0, d1 = min(as[0] + n - as[m - 1], bs[0] - 1); if (check(n, m, d0) == 0 || check(n, m, d1) == 0) { puts("Yes"); continue; } while (d0 + 1 < d1) { int d = (d0 + d1) / 2; int c = check(n, m, d); if (d == 0) break; if (c < 0) d0 = d; else d1 = d; } if (d0 + 1 < d1) puts("Yes"); else puts("No"); } return 0; }