#include <bits/stdc++.h>
using namespace std;
vector<int> v[50], v1, v2;
bool b[50];
struct st {
  int x, y, z;
  void set(int i, int j, int k) {
    x = i;
    y = j;
    z = k;
  }
  void put() { printf("%d %d %d\n", x, y, z); }
} a[50];
void dfs(int x) {
  if (b[x]) return;
  b[x] = 1;
  v2.push_back(x);
  for (int i = 0; i < v[x].size(); i++) dfs(v[x][i]);
}
int main() {
  int i, j, k, n, m, x, z, y;
  scanf("%d%d", &n, &m);
  while (m--) {
    scanf("%d%d", &j, &k);
    v[j].push_back(k);
    v[k].push_back(j);
  }
  for (i = 1; i <= n; i++)
    if (v[i].size() == 0) v1.push_back(i), b[i] = 1;
  k = 1;
  for (i = 1; i <= n; i++) {
    if (b[i]) continue;
    dfs(i);
    if (v2.size() > 3) {
      printf("-1\n");
      return 0;
    }
    while (v2.size() < 3) {
      if (v1.size() == 0) {
        printf("-1\n");
        return 0;
      }
      v2.push_back(v1.back());
      v1.pop_back();
    }
    a[k++].set(v2[0], v2[1], v2[2]);
    v2.clear();
  }
  for (i = 0; i < v1.size(); i += 3) a[k++].set(v1[i], v1[i + 1], v1[i + 2]);
  for (i = 1; i <= n / 3; i++) a[i].put();
  return 0;
}
