#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int get_next_state(bool s1, bool s2, bool b1, bool b2) {
  if (s1 && b1) {
    return -1;
  }
  if (s2 && b2) {
    return -1;
  }
  bool a1 = s1 | b1;
  bool a2 = s2 | b2;
  if ((a1 && a2) || (!a1 && !a2)) {
    return 0;
  }
  if (a1) {
    return 1;
  }
  return 2;
}

bool solve_dp(int n, const vector<pair<int, int>>& cr) {
  const bool S1[3] = {false, false, true};
  const bool S2[3] = {false, true, false};
  vector<vector<bool>> filled(2, vector<bool>(n, false));
  int m = cr.size();
  for (int i = 0; i < m; ++i) {
    filled[cr[i].second][cr[i].first] = true;
  }
  /*
  for (int r = 0; r < 2; ++r) {
    for (int i = 0; i < n; ++i) {
      if (filled[r][i]) {
	cout << '#';
      }
      else {
	cout << '.';
      }
    }
    cout << endl;
    } */
  vector<uint8_t> dp(n+1);
  dp[n] = 1;
  for (int i = n-1; i >= 0; --i) {
    dp[i] = 0;
    for (int state = 0; state < 3; ++state) {
      int next_state = get_next_state(S1[state], S2[state], filled[0][i], filled[1][i]);
      //cout << "next_state[" << i << "][" << state << "] = " << next_state << endl;
      if (next_state >= 0) {
	dp[i] |= ((dp[i+1] >> next_state) & 1) << state;
      }
    }
    //cout << dp[i] << " ";
  }
  //cout << endl;
  return (dp[0] & 1) == 1;
}

bool solve_dp2(int n, const vector<pair<int, int>>& cr) {
  int m = cr.size();
  int prv_state = 0;
  int prv_posish = 0;
  int p = 0;
  while (p < m) {
    int posish = cr[p].first;
    int state = 0;
    if ((p < (m-1)) && (cr[p+1].first == posish)) {
      p += 2;
    }
    else {
      state = cr[p].second+1;
      p++;
    }
    if (state == 0) {
      if (prv_state != 0) {
	return false;
      }
    }
    else {
      if (prv_state == 0) {
	prv_state = 3-state;
      }
      else {
	if (((posish - prv_posish) % 2) == 1) {
	  prv_state = 3-prv_state;
	}
	if (prv_state != state) {
	  return false;
	}
	prv_state = 0;
      }
    }
    prv_posish = posish;
  }
  return (prv_state == 0);
}

bool solve(int n, const vector<int>& r, const vector<int>& c) {
  int m = r.size();
  vector<pair<int, int>> cr(m);
  for (int i = 0; i < m; ++i) {
    cr[i] = make_pair(c[i], r[i]);
  }
  sort(cr.begin(), cr.end());
  return solve_dp2(n, cr);
  vector<pair<int, int>> ccr(m);
  int prv_c = 0;
  int compress = 0;
  for (int i = 0; i < m; ++i) {
    if ((cr[i].first - prv_c) >= 2) {
      compress += ((cr[i].first - prv_c - 2) / 2) * 2;
    }
    prv_c = cr[i].first;
    ccr[i] = make_pair(cr[i].first-compress, cr[i].second);
  }
  return solve_dp(n-compress, ccr);
}

void test_case() {
  int n, m;
  cin >> n >> m;
  vector<int> r(m), c(m);
  for (int i = 0; i < m; ++i) {
    cin >> r[i] >> c[i];
    --r[i];
    --c[i];
  }
  if (solve(n, r, c)) {
    cout << "YES" << endl;
  }
  else {
    cout << "NO" << endl;
  }
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int t;
  cin >> t;
  for (int i = 0; i < t; ++i) {
    test_case();
  }
}
