  #include <bits/stdc++.h>
  using namespace std;
  #define ll long long
  #define fo(i,n) for(int i=0;i<n;i++)
  #define rep(i,k,n) for(int i=k;k<n?i<n:i>n;k<n?i+=1:i-=1)
  #define pb push_back
  #define mp make_pair
  #define F first
  #define S second
  #define all(x) x.begin(), x.end()
  #define clr(x) memset(x, 0, sizeof(x))
  #define ini(a, i) memset(a, i, sizeof(a))
  #define sortall(x) sort(all(x))
  #define rev(x) reverse(all(x))
  #define PI 3.1415926535897932384626
  typedef pair<ll, ll> pii;
  typedef pair<ll, ll> pl; 
  typedef vector<ll> vi;
  typedef vector<ll>  vl;
  typedef vector<pii> vpii;
  typedef vector<pl>  vpl;
  typedef vector<vi>  vvi;
  typedef vector<vl>  vvl;
  const int INF = 1000000007;
  const long long INFLL = (ll)INF * (ll)INF;
  #define ld long double
  const ld EPS = 10e-9;
  const unsigned int M = 1000000007; 
  #define int long long
  long double pi = 2*acos(0.0);

  // cout << fixed << setprecision(0) << pi <<" "<<npi<<endl;

  //s.substr(start index,length)
  //lower_bound
  //upper_bound
  //*max_element
  //*mix_element
  //continue
  // vector<vector<int>> vec( n , vector<int> (m, 0));
  // in a matrix if i select cell a(i,j) then the parity of (i+j) all the adjacent cells is opposite
  //check cube root
  // double b=cbrt(x-a*a*a);
  // if(floor(b)==b)
  // {
  //   yes;return;
  // }
//const bool is_in = container.find(element) != container.end();
  //int chalao=1000000000000;



void solve()  
{      
  int n,m;
  cin>>n>>m;
  int r,c;
  vector<vector<int>> rc(m);
  int temp;

  fo(i,m)
  {
      cin>>r>>c;
      rc[i].pb(c);
      rc[i].pb(r);
  }
  sortall(rc);

  if(m%2==1)
  {
      cout<<"NO"<<endl;
      return;
  }

  int i=0;

  while(i<m-1)
  {
      if(rc[i][0]==rc[i+1][0])
      {
        i+=2;
        continue;
      }
      /// go to next column
      int cur_column=rc[i][0];
      int next_column=rc[i+1][0];

      // check compatibility with next column
      int cur_row=rc[i][1];
      int nxt_row=rc[i+1][1];

      if(cur_row==nxt_row &&  (next_column-cur_column)%2==0)
      {
        cout<<"No"<<endl;
        return;
      }
      else if(cur_row!=nxt_row &&(next_column-cur_column)%2==1)
      {
        cout<<"NO"<<endl;
        return;
      }
      
      // check next_2_next_column

      if(i+2<m) //there is a next-2-next-entry
      {
        
        int next_2_next_column=rc[i+2][0];
        if(next_2_next_column==next_column)
        {
          cout<<"NO"<<endl;
          return;
        }
      }

      i+=2;

  }
      
  cout<<"YES"<<endl;


}  

 int32_t main()
 {
     clock_t start, end;
     start = clock();
     ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
     #ifndef ONLINE_JUDGE
     freopen("input.txt", "r", stdin);
     freopen("output.txt", "w", stdout);
     #endif // ONLINE_JUDGE
     //sieve();
     int t=1;
     cin>>t;
     
     while(t--) solve();
     //cout<<t1;
     end = clock(); 


    //  // Calculating total time taken by the program. 
    // double time_taken = double(end - start) / double(CLOCKS_PER_SEC);
    // cout << "\nTime taken by program is : " << fixed << time_taken << setprecision(5); 
    // cout << " sec " << endl; 

     return 0;
 }