#include <bits/stdc++.h>
using namespace std;
class team {
 public:
  int x, y, z;
};
int search(team *, int, int);
int main() {
  int m, n, t;
  cin >> n >> m;
  int *arr1, *arr2;
  arr1 = new int[m];
  arr2 = new int[m];
  for (int i = 0; i < m; i++) cin >> arr1[i] >> arr2[i];
  team *res = new team[n / 3];
  for (int i = 0; i < n / 3; i++) {
    res[i].x = 0;
    res[i].y = 0;
    res[i].z = 0;
  }
  bool *tak = new bool[n + 1];
  bool resf = false;
  for (int i = 0; i < n + 1; i++) tak[i] = false;
  tak[0] = true;
  for (int i = 0; i < m; i++) {
    if ((!tak[arr1[i]]) && (!tak[arr2[i]])) {
      bool f = true;
      for (int j = 0; j < n / 3; j++) {
        if (res[j].x == 0) {
          res[j].x = arr1[i];
          res[j].y = arr2[i];
          tak[arr1[i]] = true;
          tak[arr2[i]] = true;
          f = false;
          break;
        }
      }
      if (f) {
        resf = true;
        goto End;
      }
    } else if (tak[arr1[i]] && tak[arr2[i]]) {
      if (search(res, arr1[i], n / 3) == search(res, arr2[i], n / 3))
        continue;
      else {
        resf = true;
        goto End;
      }
    } else if (tak[arr1[i]]) {
      t = search(res, arr1[i], n / 3);
      if (res[t].z == 0) {
        res[t].z = arr2[i];
        tak[arr2[i]] = true;
      } else {
        resf = true;
        goto End;
      }
    } else if (tak[arr2[i]]) {
      t = search(res, arr2[i], n / 3);
      if (res[t].z == 0) {
        res[t].z = arr1[i];
        tak[arr1[i]] = true;
      } else {
        resf = true;
        goto End;
      }
    }
  }
  for (int i = 0; i < n / 3; i++) {
    if (res[i].x == 0) {
      for (int j = 1; j < n + 1; j++)
        if (!tak[j]) {
          res[i].x = j;
          tak[j] = true;
          break;
        }
    }
    if (res[i].y == 0) {
      for (int j = 1; j < n + 1; j++)
        if (!tak[j]) {
          res[i].y = j;
          tak[j] = true;
          break;
        }
    }
    if (res[i].z == 0) {
      for (int j = 1; j < n + 1; j++)
        if (!tak[j]) {
          res[i].z = j;
          tak[j] = true;
          break;
        }
    }
  }
End:
  if (resf)
    cout << -1;
  else {
    for (int i = 0; i < n / 3; i++)
      cout << res[i].x << ' ' << res[i].y << ' ' << res[i].z << endl;
  }
  return 0;
}
int search(team *input, int val, int size) {
  for (int i = 0; i < size; i++) {
    if (input[i].x == val) return i;
    if (input[i].y == val) return i;
    if (input[i].z == val) return i;
  }
}
