#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > g;
struct kommad {
  int x, y, z;
};
kommad ans[103];
int n, m;
bool flag[103];
int a[103][103];
int cou[103];
int coun2;
int ind;
void dfs(int x) {
  int i;
  flag[x] = true;
  for (i = 0; i < g[x].size(); i++) {
    if (!flag[g[x][i]]) {
      a[ind][cou[ind]++] = g[x][i];
      coun2++;
      dfs(g[x][i]);
    }
  }
}
int main() {
  scanf("%d %d", &n, &m);
  int i;
  int x, y;
  for (i = 0; i < n / 3; i++) ans[i].x = ans[i].y = ans[i].z = -1;
  g.resize(n);
  for (i = 0; i < m; i++) {
    scanf("%d %d", &x, &y);
    x--;
    y--;
    g[x].push_back(y);
    g[y].push_back(x);
  }
  int coun = 0;
  for (ind = 0; ind < n; ind++) {
    coun2 = 0;
    if (!flag[ind]) dfs(ind);
    if (coun2 > 0) coun++;
    if (coun2 > 2) {
      printf("-1\n");
      return 0;
    }
  }
  if (coun > n / 3) {
    printf("-1\n");
    return 0;
  }
  for (i = 0; i < n; i++) flag[i] = false;
  int j = 0;
  for (i = 0; i < n; i++) {
    if (cou[i] > 0) {
      flag[i] = true;
      ans[j].x = i + 1;
      ans[j].y = a[i][0] + 1;
      flag[a[i][0]] = true;
      if (cou[i] == 2) {
        ans[j].z = a[i][1] + 1;
        flag[a[i][1]] = true;
      }
      j++;
    }
  }
  j = 0;
  for (i = 0; i < n; i++) {
    if (cou[i] == 0 && !flag[i]) {
      while (ans[j].x > 0 && ans[j].y > 0 && ans[j].z > 0) j++;
      if (ans[j].x == -1)
        ans[j].x = i + 1;
      else if (ans[j].y == -1)
        ans[j].y = i + 1;
      else
        ans[j].z = i + 1;
    }
  }
  for (i = 0; i < n / 3; i++)
    printf("%d %d %d\n", ans[i].x, ans[i].y, ans[i].z);
  return 0;
}
