#include <bits/stdc++.h>
using namespace std;
const int maxn = 50;
int n, m;
int cnt[4];
bool mark[maxn];
vector<int> group[4];
vector<int> vertex[maxn], team[maxn];
void dfs(int root, int index) {
  mark[root] = true;
  team[index].push_back(root);
  for (int i = 0; i < ((int(vertex[root].size()))); i++) {
    int adj = vertex[root][i];
    if (!mark[adj]) dfs(adj, index);
  }
  return;
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    u--;
    v--;
    vertex[u].push_back(v);
    vertex[v].push_back(u);
  }
  int index = 0;
  for (int i = 0; i < n; i++) {
    if (!mark[i]) {
      dfs(i, index);
      int size = ((int(team[index].size())));
      if (size > 3) {
        cout << -1 << endl;
        return 0;
      } else {
        cnt[((int(team[index].size())))]++;
        group[((int(team[index].size())))].push_back(index);
      }
      index++;
    }
  }
  if (cnt[2] > cnt[1]) {
    cout << -1 << endl;
    return 0;
  }
  for (int i = 0; i < ((int(group[3].size()))); i++) {
    int i1 = group[3][i];
    cout << team[i1][0] + 1 << " " << team[i1][1] + 1 << " " << team[i1][2] + 1
         << endl;
  }
  for (int i = 0; i < ((int(group[2].size()))); i++) {
    int i2 = group[2][i];
    int i1 = group[1][i];
    cout << team[i1][0] + 1 << " " << team[i2][0] + 1 << " " << team[i2][1] + 1
         << endl;
  }
  for (int i = ((int(group[2].size()))); i < ((int(group[1].size()))); i += 3) {
    int i1 = group[1][i], i2 = group[1][i + 1], i3 = group[1][i + 2];
    cout << team[i1][0] + 1 << " " << team[i2][0] + 1 << " " << team[i3][0] + 1
         << endl;
  }
  return 0;
}
