#include <bits/stdc++.h>
using namespace std;
inline long long mod(long long n, long long MOD = (long long)(1e9 + 7)) {
  return (n % MOD + MOD) % MOD;
}
inline long long gcd(long long a, long long b) {
  return b == 0LL ? a : gcd(b, a % b);
}
inline long long modPow(long long a, long long b,
                        long long MOD = (long long)(1e9 + 7)) {
  long long ret = 1LL;
  while (b > 0LL) {
    if (b & 1) ret = mod(ret * a, MOD);
    a = mod(a * a, MOD);
    b >>= 1;
  }
  return ret;
}
inline bool leapYear(int year) {
  return (year % 400 == 0) || (year % 100 != 0 && year % 4 == 0);
}
bool g[50][50];
bool seen[50];
vector<int> dfs(int vertex) {
  seen[vertex] = true;
  vector<int> ret;
  ret.push_back(vertex + 1);
  for (int i = (0); i < ((50)); i++)
    if (g[vertex][i] && !seen[i]) {
      vector<int> r = dfs(i);
      for (int i = (0); i < ((r.size())); i++) ret.push_back(r[i]);
    }
  return ret;
}
vector<vector<int> > cc[4];
int main() {
  int n, m;
  int u, v;
  cin >> n >> m;
  for (int i = (0); i < ((m)); i++) {
    cin >> u >> v;
    u--;
    v--;
    g[u][v] = g[v][u] = true;
  }
  bool ok = true;
  for (int i = (0); i < ((n)); i++)
    if (!seen[i]) {
      vector<int> x = dfs(i);
      if (x.size() > 3) {
        ok = false;
        break;
      } else
        cc[x.size()].push_back(x);
    }
  if (cc[2].size() > cc[1].size()) ok = false;
  if (ok) {
    for (int i = (0); i < ((cc[3].size())); i++) {
      for (int j = (0); j < ((cc[3][i].size())); j++) {
        cout << cc[3][i][j] << " ";
      }
      cout << endl;
    }
    for (int i = (0); i < ((cc[2].size())); i++) {
      for (int j = (0); j < ((cc[2][i].size())); j++) {
        cout << cc[2][i][j] << " ";
      }
      cout << cc[1][i][0] << endl;
    }
    int i = cc[2].size();
    while (i < cc[1].size()) {
      for (int j = (0); j < ((3)); j++) {
        cout << cc[1][i + j][0] << " ";
      }
      cout << endl;
      i += 3;
    }
  } else
    cout << -1 << endl;
  return 0;
}
