#include <bits/stdc++.h>
using namespace std;
const long long int mod = 1e9 + 7;
long long int n, m, vis[105] = {0}, cnt = 0;
vector<long long int> v[105], tt, dd, ss;
void dfs(long long int s) {
  vis[s] = 1;
  cnt++;
  long long int i;
  for (i = 0; i < v[s].size(); i++) {
    if (vis[v[s][i]] == 0) dfs(v[s][i]);
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int i, j, x, y;
  cin >> n >> m;
  for (i = 1; i <= m; i++) {
    cin >> x >> y;
    v[x].push_back(y);
    v[y].push_back(x);
  }
  for (i = 0; i < 105; i++) vis[i] = 0;
  long long int g = 0, db = 0, si = 0;
  for (i = 1; i <= n; i++) {
    if (vis[i] == 0) {
      cnt = 0;
      dfs(i);
      if (cnt > 3) {
        cout << "-1";
        return 0;
      }
      if (cnt == 2) {
        db++;
        dd.push_back(i);
      }
      if (cnt == 1) {
        si++;
        ss.push_back(i);
      }
      if (cnt == 3) tt.push_back(i);
    }
  }
  if ((db > si) || (si - db) % 3 != 0) {
    cout << "-1";
    return 0;
  }
  for (i = 0; i < tt.size(); i++) {
    long long int p = tt[i], q, r;
    for (j = 0; j < v[p].size(); j++) {
      q = v[p][j];
      if (q != p) break;
    }
    for (j = 0; j < v[q].size(); j++) {
      r = v[q][j];
      if (r != p && r != q) break;
    }
    cout << p << " " << q << " " << r << '\n';
  }
  for (i = 0; i < dd.size(); i++) {
    long long int p = dd[i];
    long long int q = v[p][0];
    long long int r = ss[0];
    ss.erase(ss.begin());
    cout << p << " " << q << " " << r << '\n';
  }
  for (i = 0; i < ss.size(); i += 3)
    cout << ss[i] << " " << ss[i + 1] << " " << ss[i + 2] << '\n';
  return 0;
}
