#include<iostream>
#include<cmath> 
#include<vector> 
#include<string> 
#include<set> 
#include<algorithm> 
#include<map> 
#include<stack> 
#include<queue>

using namespace std;

typedef long double ld;
typedef long long ll;
typedef pair<ll, ll> pi;
typedef pair<double, double> pd;
typedef vector<ll> vi;
typedef vector<vi> vvi;
typedef vector<bool> vb;
typedef vector<pi> vpi;
typedef vector<pd> vpd;
typedef vector<vpi> vvpi;
typedef map<ll, ll> mii;
typedef set<ll> si;
typedef set<pi> spi;
typedef multiset<ll> msi;
typedef vector<si> vsi;
typedef vector<string> vs;

template <typename T> using V = vector<T>;
template <typename T> using VV = vector<V<T>>;
template < typename T >
istream& operator>> (istream& cin, V<T>& arr) {
	for (T& val : arr) {
		cin >> val;
	}
	return cin;
}
template < typename T, typename V>
istream& operator>> (istream& cin, pair<T, V>& p) {
	cin >> p.first >> p.second;
	return cin;
}


ostream& operator<< (ostream& cout, pi& p) {
	cout << p.first << " " << p.second << endl;
	return cout;
}

template < typename T >
ostream& operator<< (ostream& cout, V<T>& arr) {
	for (T& val : arr) {
		cout << val << " ";
	}
	return cout;
}


ll tmax(ll v, ll tl, ll tr, ll l, ll r, vi& tree) {
	if (l > r) {
		return -1e9;
	}
	if (l == tl && r == tr) {
		return tree[v];
	}
	ll tm = (tl + tr) / 2;
	return max(
		tmax(v * 2, tl, tm, l, min(r, tm), tree),
		tmax(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r, tree)
	);
}



void build(vi& arr, vi& tree, int v, int tl, int tr) {
	if (tl == tr)
		tree[v] = arr[tl];
	else {
		int tm = (tl + tr) / 2;
		build(arr, tree, v * 2, tl, tm);
		build(arr, tree, v * 2 + 1, tm + 1, tr);
		tree[v] = max(tree[v * 2], tree[v * 2 + 1]);
	}
}

void dfs(ll v, vvi& g, vi viz) {
	if (viz[v] != 0) {
		return;
	}
	viz[v] = 1;
	for (ll u : g[v]) {
		dfs(u, g, viz);
	}
}


int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	cout.precision(10);


	ll t;
	cin >> t;
	while (t--) {

		ll n, m;
		cin >> n >> m;
		
		map<ll, pair<bool, bool>> mapa;

		for (int i = 0; i < m; i++) {
			ll a,b;
			cin >> a >> b;
			if (a == 2) {
				mapa[b].second = true;
			}
			else {
				mapa[b].first = true;
			}			
		}



		bool a = true;
		bool b = true;
		ll ind = 0;
		bool flag = true;
		for (auto pp : mapa) {
			ll pind = pp.first;
			auto p = pp.second;
			if (a == b) {
				a = p.first;
				b = p.second;
				ind = pind;
				continue;
			}
			
			if (p.first && p.second) {
				flag = false;
				break;
			}
			ll len = (pind - ind) % 2;
			if (len == 0) {

				if (a == !p.first && b == !p.second) {
					a = true;
					b = true;
					ind = pind;
					continue;
				}
				else {
					flag = false;
					break;
				}

			}
			else {
				if (a == p.first && b == p.second) {
					a = true;
					b = true;
					ind = pind;
					continue;
				}
				else {
					flag = false;
					break;
				}
			}

		}
		flag &= a && b;


		if (flag) {
			cout << "YES" << endl;
		}
		else {
			cout << "NO" << endl;
		}

	}



	return 0;
}