#include <bits/stdc++.h>
using namespace std;
int vis[50] = {0};
vector<int> v[55];
vector<int> l;
vector<vector<int> > v1;
vector<vector<int> > v2;
vector<vector<int> > v3;
int cnt;
void dfs(int x, int p) {
  vis[x] = 1;
  cnt++;
  int i;
  l.push_back(x);
  for (i = 0; i < v[x].size(); i++) {
    if (vis[v[x][i]] == 0) dfs(v[x][i], x);
  }
}
int main() {
  int n, m, i;
  cin >> n >> m;
  for (i = 1; i <= m; i++) {
    int x, y;
    cin >> x >> y;
    v[x].push_back(y);
    v[y].push_back(x);
  }
  int f = 0;
  for (i = 1; i <= n && f == 0; i++) {
    if (vis[i] == 0) {
      cnt = 0;
      l.clear();
      dfs(i, -1);
      if (cnt == 1) {
        v1.push_back(l);
      } else if (cnt == 2) {
        v2.push_back(l);
      } else if (cnt == 3) {
        v3.push_back(l);
      } else if (cnt > 3) {
        f = 1;
        break;
      }
    }
  }
  if (f == 1) {
    cout << "-1";
    return 0;
  }
  if (f == 0) {
    int k = v1.size() - v2.size();
    if (k % 3 != 0 || k < 0) {
      f = 1;
    }
    if (f == 1) {
      cout << "-1";
      return 0;
    }
    if (f == 0 && k >= 0 && k % 3 == 0) {
      for (i = 0; i < v3.size(); i++) {
        for (int j = 0; j < 3; j++) {
          cout << v3[i][j] << " ";
        }
        cout << "\n";
      }
      for (i = 0; i < v2.size(); i++) {
        for (int j = 0; j < 2; j++) {
          cout << v2[i][j] << " ";
        }
        cout << v1[i][0] << " ";
        cout << "\n";
      }
      for (i = v2.size(); i < v1.size(); i = i + 3) {
        cout << v1[i][0] << " ";
        cout << v1[i + 1][0] << " ";
        cout << v1[i + 2][0] << " ";
        cout << "\n";
      }
    }
  }
  if (f == 1) {
    cout << "-1";
  }
  return 0;
}
