#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector")
using namespace std;
using lli = long long;
using ld = long double;
using ii = pair<int, int>;
using vi = vector<int>;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int N = 1e5 + 5;
set<int> graph[2][N];
int n, m;
int nextNode(int u) {
  uniform_int_distribution<int> a(1, n);
  int v = a(rng);
  while (v == u) v = a(rng);
  return v;
}
bool validEdge(int u, int v) {
  for (auto k = (0) - ((0) > (2)); k != 2 - ((0) > (2));
       k += 1 - 2 * ((0) > (2)))
    if (graph[k][u].count(v)) return 0;
  return int(graph[1][v].size()) < 2;
}
void err() {
  cout << "-1\n";
  exit(0);
}
int main() {
  cin.tie(0)->sync_with_stdio(0), cout.tie(0);
  cin >> n >> m;
  for (auto i = (0) - ((0) > (m)); i != m - ((0) > (m));
       i += 1 - 2 * ((0) > (m))) {
    int u, v;
    cin >> u >> v;
    graph[0][u].insert(v);
    graph[0][v].insert(u);
  }
  for (auto x = (0) - ((0) > (150)); x != 150 - ((0) > (150));
       x += 1 - 2 * ((0) > (150))) {
    for (auto u = (1) - ((1) > (n + 1)); u != n + 1 - ((1) > (n + 1));
         u += 1 - 2 * ((1) > (n + 1)))
      graph[1][u].clear();
    bool nxt = 0;
    for (auto it = (0) - ((0) > (m)); it != m - ((0) > (m));
         it += 1 - 2 * ((0) > (m))) {
      int u = nextNode(0);
      int t = 4 * n;
      while (int(graph[1][u].size()) == 2 && t--) u = nextNode(0);
      ;
      if (t == -1) {
        nxt = 1;
        break;
      }
      int v = nextNode(u);
      t = 4 * n;
      while (!validEdge(u, v) && t--) v = nextNode(u);
      ;
      if (t == -1) {
        nxt = 1;
        break;
      }
      graph[1][u].insert(v);
      graph[1][v].insert(u);
    }
    if (nxt) continue;
    vector<ii> edges;
    for (auto u = (1) - ((1) > (n + 1)); u != n + 1 - ((1) > (n + 1));
         u += 1 - 2 * ((1) > (n + 1)))
      for (int v : graph[1][u])
        if (u < v) edges.push_back({u, v});
    if (int(edges.size()) == m) {
      for (auto [u, v] : edges) cout << u << " " << v << '\n';
      return 0;
    }
  }
  err();
  return 0;
}
