#include <queue>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cstdlib>

using namespace std;

const int MAXN=4005;

vector<int> E[MAXN];
bool vis[MAXN];
int N, M;

bool bfs(int st)
{
	memset(vis, 0, sizeof(vis));
	queue<int> q;
	while (!q.empty()) q.pop();;
	q.push(st); vis[st]=1;
	while (!q.empty())
	{
		int u=q.front(); q.pop();
		for (int i=0; i<E[u].size(); i++)
		{
			int v=E[u][i];
			if (!vis[v])
			{
				vis[v]=1;
				q.push(v);
			}
			else if (v==st) return false;

		}
	}
	return true;
}

int gao(int a)
{
	if (a<0) return -a+N;
	else return a;
}

int main()
{
	while (scanf("%d%d", &N, &M)==2)
	{
		for (int i=1; i<=N; i++) E[i].clear();
		while (M--)
		{
			int u, v, nu, nv;
			scanf("%d%d", &u, &v);
			if (u>0) nu=u+N;
			else nu=-u;
			if (v>0) nv=v+N;
			else nv=-v;
			E[gao(nu)].push_back(gao(v));
			E[gao(nv)].push_back(gao(u));
		}
		bool flag=true;
		for (int i=1; i<=N&&flag; i++)
		{
			if (!bfs(i)&&!bfs(i+N)) flag=false;
		}
		if (flag) puts("yes");
		else puts("no");
	}
	return 0;
}
