#include <bits/stdc++.h>
using namespace std;
vector<int> ans[48];
vector<int> g[48];
bool mark[48];
void dfs(int node, int ind) {
  if (mark[node]) return;
  mark[node] = true;
  ans[ind].push_back(node);
  for (int i = 0; i < g[node].size(); i++) dfs(g[node][i], ind);
}
int main() {
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    x--, y--;
    g[x].push_back(y);
    g[y].push_back(x);
  }
  int cmp = 0;
  for (int i = 0; i < n; i++) {
    if (!mark[i] && g[i].size()) dfs(i, cmp++);
  }
  int groups = 0;
  for (int i = 0; i < n; i++) {
    if (ans[i].size() > 3) return cout << -1 << endl, 0;
    if (ans[i].size()) groups++;
  }
  if (groups > n / 3) return cout << -1 << endl, 0;
  for (int i = 0; i < n; i++) {
    bool found = false;
    for (int j = 0; j < n / 3; j++)
      for (int k = 0; k < ans[j].size(); k++)
        if (ans[j][k] == i) found = true;
    if (!found) {
      for (int j = 0; j < n / 3; j++)
        if (ans[j].size() < 3) {
          ans[j].push_back(i);
          break;
        }
    }
  }
  for (int i = 0; i < n / 3; i++)
    for (int j = 0; j < 3; j++) cout << ans[i][j] + 1 << " \n"[j == 2];
}
