#include<bits/stdc++.h>
using namespace std;
void rd(int &x){
  int k, m=0;
  x=0;
  for(;;){
    k = getchar_unlocked();
    if(k=='-'){
      m=1;
      break;
    }
    if('0'<=k&&k<='9'){
      x=k-'0';
      break;
    }
  }
  for(;;){
    k = getchar_unlocked();
    if(k<'0'||k>'9'){
      break;
    }
    x=x*10+k-'0';
  }
  if(m){
    x=-x;
  }
}
void wt_L(int x){
  char f[10];
  int m=0, s=0;
  if(x<0){
    m=1;
    x=-x;
  }
  while(x){
    f[s++]=x%10;
    x/=10;
  }
  if(!s){
    f[s++]=0;
  }
  if(m){
    putchar_unlocked('-');
  }
  while(s--){
    putchar_unlocked(f[s]+'0');
  }
}
void wt_L(long long x){
  char f[20];
  int m=0, s=0;
  if(x<0){
    m=1;
    x=-x;
  }
  while(x){
    f[s++]=x%10;
    x/=10;
  }
  if(!s){
    f[s++]=0;
  }
  if(m){
    putchar_unlocked('-');
  }
  while(s--){
    putchar_unlocked(f[s]+'0');
  }
}
template<class S, class T> inline S chmin(S &a, T b){
  if(a>b){
    a=b;
  }
  return a;
}
template<class S, class T> inline S chmax(S &a, T b){
  if(a<b){
    a=b;
  }
  return a;
}
int A[100000], B[100000], C[100000], M, N, dame;
long long magic=-4611686016279904256LL, val_m[100000], val_p[100000];
vector<int> cost[100000], edge[100000];
void doit(int i){
  int j, k, r, val;
  long long nx;
  if(dame){
    return;
  }
  for(k=0;k<edge[i].size();k++){
    j = edge[i][k];
    val = cost[i][k];
    r = 0;
    if(val_p[i] != magic){
      nx = val - val_p[i];
      if(val_m[j] == magic){
        val_m[j] = nx;
        r = 1;
      }
      if(val_m[j] != nx){
        dame=1;
        return;
      }
    }
    if(val_m[i] != magic){
      nx = val - val_m[i];
      if(val_p[j] == magic){
        val_p[j] = nx;
        r = 1;
      }
      if(val_p[j] != nx){
        dame=1;
        return;
      }
    }
    if(r){
      doit(j);
    }
  }
}
int main(){
  int i, j, k;
  long long res, x, y;
  rd(N);
  rd(M);
  {
    int Lj4PdHRW;
    for(Lj4PdHRW=0;Lj4PdHRW<M;Lj4PdHRW++){
      rd(A[Lj4PdHRW]);
      rd(B[Lj4PdHRW]);
      rd(C[Lj4PdHRW]);
    }
  }
  for(i=0;i<M;i++){
    A[i]--;
    B[i]--;
  }
  for(k=0;k<M;k++){
    i = A[k];
    j = B[k];
    edge[i].push_back(j);
    edge[j].push_back(i);
    cost[i].push_back(C[k]);
    cost[j].push_back(C[k]);
  }
  for(i=0;i<N;i++){
    val_p[i] = val_m[i] = magic;
  }
  val_p[0] = 0;
  doit(0);
  if(dame){
    wt_L(0);
    putchar_unlocked('\n');
    return 0;
  }
  k = 0;
  for(i=0;i<N;i++){
    if(val_p[i] != magic && val_m[i] != magic){
      x = val_m[i] - val_p[i];
      if(x%2 || x <= 0){
        wt_L(0);
        putchar_unlocked('\n');
        return 0;
      }
      if(k==0){
        k = x / 2;
      }
      if(k!=x/2){
        wt_L(0);
        putchar_unlocked('\n');
        return 0;
      }
    }
  }
  if(k){
    res = 1;
    for(i=0;i<N;i++){
      if(val_p[i] != magic &&  k + val_p[i] <= 0){
        res = 0;
      }
      if(val_m[i] != magic && -k + val_m[i] <= 0){
        res = 0;
      }
    }
    wt_L(res);
    putchar_unlocked('\n');
    return 0;
  }
  x = y = 4611686016279904256LL;
  for(i=0;i<N;i++){
    if(val_p[i]!=magic){
      chmin(x, val_p[i]);
    }
    if(val_m[i]!=magic){
      chmin(y, val_m[i]);
    }
  }
  res = y + x - 1;
  chmax(res, 0);
  wt_L(res);
  putchar_unlocked('\n');
  return 0;
}
// cLay varsion 20180707-1 [beta]

// --- original code ---
// int N, M;
// int A[1d5], B[1d5], C[1d5];
// 
// vector<int> edge[1d5], cost[1d5];
// 
// ll val_p[1d5], val_m[1d5];
// int dame;
// 
// ll magic = -ll_inf;
// 
// void doit(int i){
//   int j, k, r;
//   int val;
//   ll nx;
// 
//   if(dame) return;
// 
//   rep(k,edge[i].size()){
//     j = edge[i][k];
//     val = cost[i][k];
//     r = 0;
// 
//     if(val_p[i] != magic){
//       nx = val - val_p[i];
//       if(val_m[j] == magic) val_m[j] = nx, r = 1;
//       if(val_m[j] != nx){ dame=1; return; }
//     }
//     if(val_m[i] != magic){
//       nx = val - val_m[i];
//       if(val_p[j] == magic) val_p[j] = nx, r = 1;
//       if(val_p[j] != nx){ dame=1; return; }
//     }
// 
//     if(r) doit(j);
//   }
// }
// 
// {
//   int i, j, k;
//   ll x, y, res;
//   
//   rd(N,M);
//   rd((A,B,C)(M));
//   rep(i,M) A[i]--, B[i]--;
// 
//   rep(k,M){
//     i = A[k];
//     j = B[k];
//     edge[i].push_back(j);
//     edge[j].push_back(i);
//     cost[i].push_back(C[k]);
//     cost[j].push_back(C[k]);
//   }
// 
//   rep(i,N) val_p[i] = val_m[i] = magic;
//   val_p[0] = 0;
//   doit(0);
// 
//   if(dame){
//     wt(0);
//     return 0;
//   }
// 
// //  rep(i,N){
// //    x = val_p[i];
// //    y = val_m[i];
// //    wt(i,x,y);
// //  }
// 
//   k = 0;
//   rep(i,N){
//     if(val_p[i] != magic && val_m[i] != magic){
//       x = val_m[i] - val_p[i];
//       if(x%2 || x <= 0){ wt(0); return 0; }
//       if(k==0) k = x / 2;
//       if(k!=x/2){ wt(0); return 0; }
//     }
//   }
//   if(k){
//     res = 1;
//     rep(i,N){
//       if(val_p[i] != magic &&  k + val_p[i] <= 0) res = 0;
//       if(val_m[i] != magic && -k + val_m[i] <= 0) res = 0;
//     }
//     wt(res);
//     return 0;
//   }
// 
//   x = y = ll_inf;
//   rep(i,N){
//     if(val_p[i]!=magic) x <?= val_p[i];
//     if(val_m[i]!=magic) y <?= val_m[i];
//   }
// 
// //  wt(x,y);
//   res = y + x - 1;
//   res >?= 0;
//   wt(res);
// }


Measured memory_bytes: 20480