#include <bits/stdc++.h>
using namespace std;
int p[50], cnt[50], n, m;
int find(int x) { return p[x] == x ? x : find(p[x]); }
int main() {
  scanf("%d%d", &n, &m);
  int u, v, i, j, k;
  for (i = 1; i <= n; i++) p[i] = i, cnt[i] = 1;
  for (i = 1; i <= m; i++) {
    scanf("%d%d", &u, &v);
    int fx = find(u), fy = find(v);
    if (fx != fy) {
      cnt[fx] += cnt[fy];
      p[fy] = fx;
    }
  }
  int V[50][50] = {0}, cnt = 0;
  int pp[50] = {0}, fx, fy;
  for (i = 1; i <= n; i++) {
    if (pp[i]) continue;
    fx = find(i);
    cnt++;
    V[cnt][0]++;
    V[cnt][V[cnt][0]] = i;
    pp[i] = true;
    for (j = 1; j <= n; j++) {
      if (i == j) continue;
      fy = find(j);
      if (fx == fy) {
        V[cnt][0]++;
        V[cnt][V[cnt][0]] = j;
        pp[j] = true;
      }
    }
  }
  memset(pp, 0, sizeof(pp));
  int tw = 0, on = 0;
  for (i = 1; i <= cnt; i++) {
    if (V[i][0] > 3) {
      printf("-1\n");
      return 0;
    }
    if (V[i][0] == 1) on++;
    if (V[i][0] == 2) tw++;
  }
  if (tw > on) {
    printf("-1\n");
    return 0;
  }
  while (tw) {
    for (i = 1; i <= cnt; i++) {
      if (pp[i]) continue;
      if (V[i][0] == 2) {
        printf("%d %d ", V[i][1], V[i][2]);
        pp[i] = true;
        break;
      }
    }
    for (i = 1; i <= cnt; i++) {
      if (pp[i]) continue;
      if (V[i][0] == 1) {
        printf("%d\n", V[i][1]);
        pp[i] = true;
        break;
      }
    }
    tw--;
    on--;
  }
  int c = 0;
  for (i = 1; i <= cnt; i++) {
    if (pp[i]) continue;
    if (V[i][0] == 1) {
      c++;
      printf("%d%c", V[i][1], c % 3 == 0 ? '\n' : ' ');
      pp[i] = true;
    }
  }
  for (i = 1; i <= cnt; i++) {
    if (V[i][0] == 3) {
      printf("%d %d %d\n", V[i][1], V[i][2], V[i][3]);
    }
  }
  return 0;
}
