#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> P;

bool solve()
{
  int M, N, K;
  cin >> M >> N;
  vector< vector<P> > conds(M);
  bool ans = false;
  for(int i = 0; i < M; i++) {
    int K; cin >> K;
    conds[i].resize(N, P(111, -1));
    for(int j = 0; j < K; j++) {
      int s, t; string cond;
      cin >> s >> cond >> t; --s;
      if(cond == "<=") {
	conds[i][s].first = min(conds[i][s].first, t);
      } else if(cond == ">=") {
	conds[i][s].second = max(conds[i][s].second, t);
      }
      if(conds[i][s].second > conds[i][s].first) ans = true;
    }
  }

  if(ans) return true;

  bool G[111][111] = {{false}};
  for(int i = 0; i < M; i++) {
    for(int j = 0; j < M; j++) {
      if(i == j) continue;
      for(int k = 0; k < N; k++) {
	G[i][j] |= (conds[i][k].first < conds[j][k].second);
      }
    }
  }
  
  for(int i = 0; i < M; i++) {
    for(int j = 0; j < M; j++) {
      for(int k = 0; k < M; k++) G[j][k] |= (G[j][i] & G[i][k]);
    }
  }
  
  for(int i = 0; i < M; i++) ans |= G[i][i];

  return ans;
}

int main()
{

  cout << (solve() ? "No" : "Yes") << endl;
  
  return 0;
}