#include <bits/stdc++.h>
using namespace std;
const int MAXN = 50;
vector<int> adj[MAXN];
int idx[MAXN];
int N, M;
bool cmp(int a, int b) { return adj[a].size() > adj[b].size(); }
int main() {
  while (cin >> N >> M) {
    for (int i = 0; i < MAXN; ++i) {
      adj[i].clear();
      adj[i].push_back(i);
      idx[i] = i;
    }
    bool error = 0;
    while (M--) {
      int a, b;
      cin >> a >> b;
      adj[a].push_back(b);
      adj[b].push_back(a);
      if (adj[a].size() > 3 || adj[b].size() > 3) {
        error = 1;
      }
    }
    if (error) {
      puts("-1");
      continue;
    }
    sort(idx + 1, idx + N + 1, cmp);
    bool used[MAXN] = {0};
    for (int k = 1; k <= N; ++k)
      if (!used[idx[k]]) {
        int i = idx[k];
        for (int j = 1; j < adj[i].size(); ++j) {
          used[adj[i][j]] = 1;
        }
        for (int j = k + 1; j <= N; ++j)
          if (!used[idx[j]]) {
            int l = idx[j];
            if (adj[i].size() + adj[l].size() <= 3) {
              used[l] = 1;
              adj[i].push_back(adj[l][0]);
            }
          }
        if (adj[i].size() != 3) {
          error = 1;
        }
      }
    if (error) {
      puts("-1");
      continue;
    }
    for (int i = 1; i <= N; ++i)
      if (!used[i])
        cout << adj[i][0] << " " << adj[i][1] << " " << adj[i][2] << endl;
  }
  return 0;
}
