#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  long long int color[n + 5];
  int color_i = 1;
  fill(color, color + n + 5, -1);
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    if (color[a] != -1 && color[b] != -1) {
      if (color[a] == color[b]) continue;
      cout << "-1";
      return 0;
    }
    if (color[a] != -1)
      color[b] = color[a];
    else if (color[b] != -1)
      color[a] = color[b];
    else {
      color[a] = color_i;
      color[b] = color_i;
      color_i++;
    }
  }
  vector<int> res;
  for (int i = 1; i <= n / 3; i++) {
    int num = 0;
    for (int t = 1; t <= n; t++)
      if (color[t] == i) {
        num++;
        res.push_back(t);
      }
    for (int t = 1; t <= n; t++)
      if (color[t] == -1 && num < 3) {
        num++;
        color[t] = i;
        res.push_back(t);
      }
    if (num != 3) {
      cout << "-1";
      return 0;
    }
  }
  bool visit[n + 5];
  fill(visit, visit + n + 5, false);
  for (int i = 0; i < res.size(); i += 3) {
    if (visit[color[res[i]]]) {
      cout << "-1";
      return 0;
    }
    if (visit[color[res[i + 1]]]) {
      cout << "-1";
      return 0;
    }
    if (visit[color[res[i + 2]]]) {
      cout << "-1";
      return 0;
    }
    visit[color[res[i]]] = true;
    visit[color[res[i + 1]]] = true;
    visit[color[res[i + 2]]] = true;
  }
  for (int i = 0; i < res.size(); i += 3)
    cout << res[i] << " " << res[i + 1] << " " << res[i + 2] << "\n";
}
