#include <bits/stdc++.h>
using namespace std;

const int N=100005;
long long X,A[N],L,R;
int n,m,cnt,T[N],vis[N];
int h[N],to[N+N],las[N+N],c[N+N];

void dfs(int i,long long a,int t)
{
	if(!vis[i])
	{
		A[i]=a,T[i]=t;
		if(X!=-1)
			if(a+1ll*t*X<=0)
			{
				printf("0");
				exit(0);
			}
		if(t>0)L=max(L,-a/t+1);
		else R=min(R,-a/t-1);
		vis[i]=1;
	}
	else
	{
		if(A[i]!=a&&T[i]==t)
		{
			printf("0");
			exit(0);
		}
		if(A[i]!=a||T[i]!=t)
		{
			if((a-A[i])%(T[i]-t))
			{
				printf("0");
				exit(0);
			}
			if(X==-1||((a-A[i])/(T[i]-t)==X))
    			X=(a-A[i])/(T[i]-t);
    		else
			{
				printf("0");
				exit(0);
			}
		}
		return ;
	}
	for(int x=h[i];x;x=las[x])
	    dfs(to[x],c[x]-a,t*-1);
}

int main()
{
	X=-1;
	scanf("%d%d",&n,&m);
	int i,u,v,w;
	L=-1,R=(1<<30);
	for(i=1;i<=m;i++)
	{
		scanf("%d%d%d",&u,&v,&w);
		las[++cnt]=h[u],h[u]=cnt,to[cnt]=v,c[cnt]=w;
		las[++cnt]=h[v],h[v]=cnt,to[cnt]=u,c[cnt]=w;
	}
	dfs(1,0,1);
	if(X!=-1)printf("1");
	else printf("%lld",max(0ll,R-L+1));
	return 0;
}
