#include <fstream>
#define int long long
// orz
using namespace std;
const int MAX_N = 1e5;
struct mata {
int l;
int r;
int d;
};
int a[MAX_N + 1];
mata v[MAX_N + 1];
int n, m;
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
int lcm(int a, int b) {
return a * b / gcd(a, b);
}
signed main() {
ifstream fin("oz.in");
ofstream fout("oz.out");
fin >> n >> m;
for (int i = 1; i <= n; i++) {
a[i] = 1;
}
for (int i = 1; i <= m; i++) {
fin >> v[i].l >> v[i].r >> v[i].d;
a[v[i].l] = lcm(a[v[i].l], v[i].d);
a[v[i].r] = lcm(a[v[i].r], v[i].d);
}
bool ok = true;
for (int i = 1; i <= m; i++) {
if (gcd(a[v[i].l], a[v[i].r]) != v[i].d) {
ok = false;
}
}
if (ok) {
for (int i = 1; i <= n; i++) {
fout << a[i] << " ";
}
} else {
fout << "-1";
}
return 0;
}