#include <bits/stdc++.h>
using namespace std;
template <typename T, typename TT>
ostream& operator<<(ostream& out, pair<T, TT> t) {
  return out << "(" << t.first << "," << t.second << ")";
}
template <typename T>
ostream& operator<<(ostream& out, vector<T> t) {
  for (int i = 0; i < ((int)(t).size()); i++) out << t[i] << " ";
  return out;
}
template <typename T>
inline bool cmin(T& a, const T& b) {
  return a > b ? a = b, 1 : 0;
}
template <typename T>
inline bool cmax(T& a, const T& b) {
  return a < b ? a = b, 1 : 0;
}
template <typename T>
void read(T& x) {
  int f = 1;
  char ch;
  x = 0;
  while (!isdigit(ch = getchar()))
    ;
  while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
  x *= f;
}
const int NX = 201234;
int n, m, p[NX];
map<int, int> e[NX];
int main() {
  read(n);
  read(m);
  for (int i = 1, u, v; i <= m; i++) {
    read(u);
    read(v);
    e[u][v] = e[v][u] = true;
  }
  for (int i = 1; i <= n; i++) p[i] = i;
  for (int T = 200; T--;) {
    random_shuffle(p + 1, p + n + 1);
    int cnt = 0;
    for (int i = 1; i <= n; i++) {
      int l = p[i], r = p[i % n + 1];
      cnt += !e[l].count(r);
    }
    if (cnt >= m) {
      for (int i = 1; i <= n; i++) {
        int l = p[i], r = p[i % n + 1];
        if (!e[l].count(r)) {
          printf("%d %d\n", l, r);
          if (!--m) return 0;
        }
      }
    }
  }
  puts("-1");
  return 0;
}
