#include <bits/stdc++.h>
using namespace std;
const int NMax = 110000;
int N, M, single[NMax];
vector<int> cant[NMax];
pair<int, int> cycle[NMax];
set<int> C;
int num[NMax];
vector<pair<int, int> > Q;
vector<int> chain;
int love(int a, int b) {
  if (a == b) return 0;
  for (int i = 0; i < cant[a].size(); i++)
    if (cant[a][i] == b) return 0;
  return 1;
}
int main() {
  scanf("%d%d", &N, &M);
  for (int i = 1; i <= M; i++) {
    int first, second;
    scanf("%d%d", &first, &second);
    cant[first].push_back(second);
    cant[second].push_back(first);
  }
  for (int I = 1; I <= N; I++) {
    C.clear();
    Q.clear();
    chain.clear();
    for (int i = 1; i <= N; i++) C.insert(i);
    int p = I, q;
    chain.push_back(p);
    C.erase(C.find(p));
    while (Q.size() < M && C.size()) {
      int flag1 = 0;
      set<int>::iterator p1 = C.begin();
      while (C.size() > 2 && N < 10000) {
        int tmp = rand() % N + 1;
        if (C.find(tmp) != C.end() && love(p, tmp)) {
          p1 = C.find(tmp);
          break;
        }
      }
      for (set<int>::iterator j = p1; j != C.end(); j++) {
        if (love(p, *j)) {
          Q.push_back(make_pair(p, *j));
          chain.push_back(*j);
          flag1 = 1;
          p = *j;
          C.erase(j);
          break;
        }
      }
      if (!flag1) {
        if (Q.size() < M && chain.size() > 2 &&
            love(chain[0], chain[chain.size() - 1]))
          Q.push_back(make_pair(chain[0], chain[chain.size() - 1]));
        chain.clear();
        set<int>::iterator j = C.begin();
        p = *j;
        C.erase(j);
      }
    }
    if (Q.size() < M && chain.size() > 2 &&
        love(chain[0], chain[chain.size() - 1]))
      Q.push_back(make_pair(chain[0], chain[chain.size() - 1]));
    if (Q.size() == M) {
      for (int i = 0; i < Q.size(); i++)
        printf("%d %d\n", Q[i].first, Q[i].second);
      return 0;
    }
  }
  puts("-1");
  return 0;
}
