#include <bits/stdc++.h>
using namespace std;
int n, m, pre[50], x, y, cnt1, cnt2;
vector<int> v[50];
int find(int x) {
  if (x == pre[x]) return x;
  return pre[x] = find(pre[x]);
}
int main() {
  cin >> n >> m;
  for (register int i = 1; i <= n; i++) pre[i] = i;
  for (register int i = 1; i <= m; i++) {
    cin >> x >> y;
    pre[find(x)] = find(y);
  }
  for (register int i = 1; i <= n; i++) v[find(i)].push_back(i);
  for (register int i = 1; i <= n; i++)
    if (v[i].size() > 3) {
      cout << -1 << endl;
      return 0;
    }
  for (register int i = 1; i <= n; i++)
    if (v[i].size() == 2)
      cnt2++;
    else if (v[i].size() == 1)
      cnt1++;
  if (cnt2 > cnt1) {
    cout << -1 << endl;
    return 0;
  }
  for (register int i = 1; i <= n; i++)
    if (v[i].size() == 1) v[0].push_back(v[i][0]);
  for (register int i = 1; i <= n; i++)
    if (v[i].size() == 3)
      cout << v[i][0] << " " << v[i][1] << " " << v[i][2] << endl;
    else if (v[i].size() == 2)
      cout << v[i][0] << " " << v[i][1] << " " << v[0][v[0].size() - 1] << endl,
          v[0].pop_back();
  while (v[0].size()) {
    cout << v[0][v[0].size() - 1] << " ";
    v[0].pop_back();
    cout << v[0][v[0].size() - 1] << " ";
    v[0].pop_back();
    cout << v[0][v[0].size() - 1] << endl;
    v[0].pop_back();
  }
  return 0;
}
