#include <stdio.h>
#define nmax 10005
#define lmax 10
int N, M, x, y, z, i, r, j, k, p, m;
int prim[] = {0, 2, 3, 5, 7, 11, 13, 17, 19, 23}, prod[nmax][lmax], cate[lmax];
int minim(int l, int r)
{
return l < r? l: r;
}
int maxim (int l, int r)
{
return l < r? r: l;
}
int main()
{
freopen("oz.in", "r", stdin);
freopen("oz.out", "w", stdout);
scanf("%d%d", &N, &M);
while (M--)
{
scanf("%d%d%d", &x, &y, &z);
for (i = 1; i < lmax; cate[i] = 0, ++i);
for (i = 1; i < lmax && z > 1; i++)
for (; z > 1 && z % prim[i] == 0; ++cate[i], z /= prim[i]);
for (i = 1; i < lmax; ++i)
if (cate[i])
{
prod[x][i] = maxim(prod[x][i], cate[i]);
prod[y][i] = maxim(prod[y][i], cate[i]);
}
}
fseek(stdin, 0, SEEK_SET);
scanf("%d%d", &N, &M);
for (; !r && M; M--)
{
scanf("%d%d%d", &x, &y, &z);
for (p = i = 1; i < lmax; ++i)
for (m = minim(prod[x][i], prod[y][i]), j = 1; j <= m; p *= prim[i], ++j);
if (p != z) r = 1;
}
if (!r)
{
for (i = 1; i <= N; ++i)
{
for (p = k = 1; k < lmax; ++k)
for (j = 1; j <= prod[i][k]; p *= prim[k], ++j);
if (i < N) printf("%d ", p);
else printf("%d\n",p);
}
}
else
printf("-1\n");
return 0;
}