#include <bits/stdc++.h>   using namespace std;   inline bool isPowerOfTwo(int x) { return (x != 0 && (x & (x - 1)) == 0); }   double pi = 3.141592653589793238462643;   int dx[8] = {1, 0, -1, 0, 1, -1, -1, 1};   int dy[8] = {0, 1, 0, -1, 1, 1, -1, -1};   inline int add(int a, int b, int m = 1000000007) {     a += b;     if (a >= m) a -= m;     return a;   }   inline int mul(int a, int b, int m = 1000000007) {     return (int)(((long long)a * (long long)b) % m);   }   inline bool ispalin(string &str) {     int n = str.length();     for (int i = 0; i < n / 2; i++)       if (str[i] != str[n - i - 1]) return false;     return true;   }   long long expo(long long base, long long pow) {     long long ans = 1;     while (pow != 0) {       if (pow & 1 == 1) {         ans = ans * base;         ans = ans % 1000000007;       }       base *= base;       base %= 1000000007;       pow /= 2;     }     return ans;   }   void swapp(int *a, int *b) {     int temp = *a;     *a = *b;     *b = temp;   }   long long invt(long long x) { return expo(x, 1000000007 - 2); }   int expFactor(int n, int p) {     int x = p;     int exponent = 0;     while ((n / x) > 0) {       exponent += n / x;       x *= p;     }     return exponent;   }   inline int countsetbit(int n) {     unsigned int count = 0;     while (n) {       n &= (n - 1);       count++;     }     return count;   }   inline int abs(int x) {     if (x < 0) return -x;     return x;   }   bool isPal(string ss) {     int len = ss.length();     for (int i = 0; i < len / 2; i++) {       int comp = len - i - 1;       if (ss[i] != ss[comp]) return false;     }     return true;   }   vector<long long> fact, inv;   void calfal(int maxn) {     fact.resize(maxn);     inv.resize(maxn);     fact[0] = inv[0] = inv[1] = 1;     for (int i = (1); i <= (maxn - 1); ++i)       fact[i] = i * fact[i - 1] % 1000000007;     for (int i = (2); i <= (maxn - 1); ++i)       inv[i] = (1000000007 - 1000000007 / i) * inv[1000000007 % i] % 1000000007;     for (int i = (1); i <= (maxn - 1); ++i)       inv[i] = inv[i] * inv[i - 1] % 1000000007;   }   long long ncr(int n, int r) {     if (r > n) return 0;     return (fact[n] * inv[r] % 1000000007) * inv[n - r] % 1000000007;   }   long long _sieve_size;   bitset<10000010> bs;   vector<int> primes;   void sieve(long long upperbound) {     _sieve_size = upperbound + 1;     bs.set();     bs[0] = bs[1] = 0;     for (long long i = 2; i <= _sieve_size; i++)       if (bs[i]) {         for (long long j = i * i; j <= _sieve_size; j += i) bs[j] = 0;         primes.push_back((int)i);       }   }   bool isPrime(long long N) {     if (N <= _sieve_size) return bs[N];     for (int i = 0; i < (int)primes.size(); i++)       if (N % primes[i] == 0) return false;     return true;   }   map<int, int> v, p;   int main() {     int n, m;     cin >> n >> m;     int d = 0;     for (int i = (0); i <= (m - 1); ++i) {       int k;       cin >> k;       int f = 0;       for (int j = (0); j <= (k - 1); ++j) {         int x;         cin >> x;         if (x > 0) {           v[x] = 1;           if (p[x]) {             f = 1;           }         } else {           x = -x;           p[x] = 1;           if (v[x]) {             f = 1;           }         }       }       if (f == 0) {         d = 1;       } else {         v.clear();         p.clear();       }     }     if (d) {       cout <<  YES  << endl;     } else {       cout <<  NO  << endl;     }   }