#include <bits/stdc++.h>
using namespace std;
int N, M;
set<pair<int, int> > bad;
vector<int> fo[100010];
bool used[100010];
vector<vector<int> > cc;
void dfs(int vr) {
  cc.back().push_back(vr);
  used[vr] = true;
  for (int i = 0; i < ((int)(fo[vr]).size()); ++i)
    if (!used[fo[vr][i]]) dfs(fo[vr][i]);
}
vector<pair<int, int> > out;
int main() {
  scanf("%d%d", &N, &M);
  for (int i = 0; i < M; ++i) {
    int f, t;
    scanf("%d%d", &f, &t);
    --f, --t;
    bad.insert(make_pair(min(f, t), max(f, t)));
    fo[f].push_back(t), fo[t].push_back(f);
  }
  if (N < 8) {
    vector<pair<int, int> > edj;
    for (int i = 0; i < N; ++i)
      for (int j = i + 1; j < N; ++j)
        if (!bad.count(make_pair(i, j))) edj.push_back(make_pair(i, j));
    int ans = -1;
    for (int msk = 0; msk < (1 << ((int)(edj).size())); ++msk) {
      if (__builtin_popcount(msk) != M) continue;
      vector<int> deg(N, 0);
      bool OK = true;
      for (int i = 0; i < ((int)(edj).size()); ++i) {
        if (!(msk & (1 << i))) continue;
        int ef = edj[i].first, et = edj[i].second;
        ++deg[ef], ++deg[et];
        if (deg[ef] > 2 || deg[et] > 2) {
          OK = false;
          break;
        }
      }
      if (OK) {
        ans = msk;
        break;
      }
    }
    if (ans == -1)
      puts("-1");
    else {
      for (int i = 0; i < ((int)(edj).size()); ++i)
        if (ans & (1 << i))
          printf("%d %d\n", edj[i].first + 1, edj[i].second + 1);
    }
  } else {
    for (int i = 0; i < N; ++i)
      if (!used[i]) cc.push_back(vector<int>()), dfs(i);
    for (int i = 1; i < ((int)(cc).size()); ++i)
      if (((int)(cc[0]).size()) < ((int)(cc[i]).size())) cc[0].swap(cc[i]);
    vector<int> base;
    for (int i = 0; i < ((int)(cc[0]).size()); i += 2) base.push_back(cc[0][i]);
    for (int i = 1; i < ((int)(cc[0]).size()); i += 2) base.push_back(cc[0][i]);
    if (((int)(base).size()) % 2 == 0) swap(base[0], base[1]);
    vector<vector<int> > add(((int)(base).size()));
    int cp = 0;
    for (int i = 1; i < ((int)(cc).size()); ++i)
      for (int j = 0; j < ((int)(cc[i]).size()); ++j) {
        add[cp].push_back(cc[i][j]);
        ++cp;
        if (cp >= ((int)(base).size())) cp = 0;
      }
    vector<int> r4;
    for (int i = 0; i < ((int)(base).size()); ++i) {
      r4.push_back(base[i]);
      for (int j = 0; j < ((int)(add[i]).size()); ++j) r4.push_back(add[i][j]);
    }
    for (int i = 0; i < ((int)(r4).size()); ++i) {
      int cur = r4[i], nxt = r4[(i + 1) % ((int)(r4).size())];
      if (cur > nxt) swap(cur, nxt);
      if (!bad.count(make_pair(cur, nxt))) out.push_back(make_pair(cur, nxt));
    }
    if (((int)(out).size()) < M)
      puts("-1");
    else {
      out.erase(out.begin() + M, out.end());
      for (int i = 0; i < ((int)(out).size()); ++i)
        printf("%d %d\n", out[i].first + 1, out[i].second + 1);
    }
  }
  return 0;
}
