#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MOD = 1000000007;
#define fr(i, n) for (i = 0; i < n; i++)
#define rep(i, n) for (i = 1; i <= n; i++)
#define lcm(x, y) ((x) * (y) / __gcd((x), (y)))
#define pb push_back
#define all(c) (c).begin(), (c).end()
#define debug(x) cout << #x << " : " << x << endl
#define part cout << "----------------------------------\n";
#include <iostream>
#define intCeil(a, b) ((a) + (b)-1) / (b)

int dx[] = {1, 1, 0, -1, -1, -1, 0, 1}; // trick to explore an implicit 2D grid
int dy[] = {0, 1, 1, 1, 0, -1, -1, -1}; // S,SE,E,NE,N,NW,W,SW neighbors  //GO FOR EVEN FOR 4 moves

#define fastinput                     \
    ios_base::sync_with_stdio(false); \
    cin.tie(NULL);                    \
    cout.tie(NULL);

LL POW(LL x, LL y)
{
    LL ans = 1;
    LL base = x;
    while (y)
    {
        if (y & 1)
        {
            ans *= base;
        }
        base = base * base;
        y = y >> 1;
    }
    return ans;
}

int main()
{
    fastinput;
    LL n, i, j, k, t, temp, tc;
    cin >> tc;
    while (tc--)
    {
        //  part;
        int m;
        cin >> n >> m;

        vector<pair<LL, LL>> points2, points;
        for (i = 0; i < m; i++)
        {
            cin >> j >> k;
            swap(j, k);
            k--;
            points2.pb({j, k});
        }
        if (m & 1)
        {
          //  debug(m);
            cout << "NO" << endl;
            continue;
        }

        //0,1,2
        //col no , id

        //    n = points2.size();
        sort(all(points2));
        for (i = 0; i < m; i++)
        {
            int ptr;
            tie(j, k) = points2[i];
            bool done = true;
            ptr = i + 1;
            if (ptr >= 0 && ptr < m)
            {
                if (points2[ptr].first == points2[i].first)
                {
                    done = false;
                    i++;
                    points.pb({j, 2});
                }
            }

            if (done)
            {
                points.pb({j, k});
            }
        }

        points.pb({n + 1, 2});
        // for (auto &x : points)
        // {
        //     cout << x.first << ";" << x.second << endl;
        // }
        //int parity_prev = -1, row_prev = -1;
        int sz = points.size();
        bool poss = true;
       // debug(sz);
        for (i = 0; i < sz; i += 2)
        {
            int par_now = points[i].second;
            int row_now = points[i].first;

            int par_next = points[i + 1].second;
            int row_next = points[i + 1].first;
            // debug(i);
            // debug(par_now);
            // debug(row_now);
            // debug(par_next);
            // debug(row_next);
            if (par_now == 2)
            {
                i--;
                continue;
            }
            if (par_next == 2)
            {
                poss = false;
                break;
            }

            if (par_next == par_now)
            {
                if ((row_next - row_now) % 2 == 0)
                {
                    poss = false;
                    break;
                }
            }
            else
            {
                if ((row_next - row_now) % 2 == 1)
                {
                    poss = false;
                    break;
                }
            }
        }

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

    return 0;
}

/*
0->0->even gap
0->1 odd
0->2
1->0 odd
1->1 ->even gap
1->2
2->0
2->1
2->2->always true



10-10-10-2-0101
*/
