#include <bits/stdc++.h>
using namespace std;
int n, m, a, b, i, j;
vector<vector<int> > mat(50);
vector<int> cur;
vector<vector<int> > c[50];
vector<vector<int> > out[1];
bool used[50];
void dfs(int i) {
  used[i] = true;
  cur.push_back(i);
  for (typeof((mat[i]).begin()) it = (mat[i]).begin(); it != (mat[i]).end();
       it++) {
    if (!used[*it]) {
      dfs(*it);
    }
  }
}
int main() {
  cin >> n >> m;
  for (i = 1; i <= m; i++) {
    cin >> a >> b;
    mat[a].push_back(b);
    mat[b].push_back(a);
  }
  for (i = 1; i <= n; i++) {
    if (!used[i]) {
      cur.clear();
      dfs(i);
      c[cur.size()].push_back(cur);
    }
  }
  for (i = 4; i <= n; i++) {
    if (c[i].size() != 0) {
      cout << -1 << "\n";
      return 0;
    }
  }
  if (c[2].size() > c[1].size()) {
    cout << -1 << "\n";
    return 0;
  }
  if ((c[1].size() - c[2].size()) % 3 != 0) {
    cout << -1 << "\n";
    return 0;
  }
  out[0] = c[3];
  for (i = 0; i < c[2].size(); i++) {
    vector<int> tout;
    tout.push_back(c[2][i][0]);
    tout.push_back(c[2][i][1]);
    tout.push_back(c[1][i][0]);
    out[0].push_back(tout);
  }
  for (; i < c[1].size(); i += 3) {
    vector<int> tout;
    tout.push_back(c[1][i][0]);
    tout.push_back(c[1][i + 1][0]);
    tout.push_back(c[1][i + 2][0]);
    out[0].push_back(tout);
  }
  for (i = 0; i < n / 3; i++) {
    cout << out[0][i][0] << ' ' << out[0][i][1] << ' ' << out[0][i][2] << '\n';
  }
  return 0;
}
