#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int dsu[N];
int n, m, state[N];
vector<int> sw[N];
int parent(int x) {
  if (dsu[x] == x) return x;
  dsu[x] = parent(dsu[x]);
  return dsu[x];
}
void unite(int x, int y) {
  x = parent(x), y = parent(y);
  dsu[x] = y;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d", &state[i]);
  for (int i = 1; i <= m; i++) {
    int k;
    scanf("%d", &k);
    for (int j = 0; j < k; j++) {
      int x;
      scanf("%d", &x);
      sw[x].push_back((i - 1) * 2);
    }
  }
  for (int i = 0; i < 2 * m; i++) dsu[i] = i;
  for (int i = 1; i <= n; i++) {
    if (state[i]) {
      unite(sw[i][0], sw[i][1]);
      unite(sw[i][0] ^ 1, sw[i][1] ^ 1);
    } else {
      unite(sw[i][0], sw[i][1] ^ 1);
      unite(sw[i][0] ^ 1, sw[i][1]);
    }
  }
  for (int i = 0; i < 2 * m; i++) {
    if (parent(i) == parent(i ^ 1)) {
      printf("NO");
      return 0;
    }
  }
  printf("YES");
  return 0;
}
