#include <bits/stdc++.h>
using namespace std;
template <typename S, typename T>
ostream& operator<<(ostream& out, pair<S, T> const& p) {
  out << '(' << p.first << ", " << p.second << ')';
  return out;
}
template <typename T>
ostream& operator<<(ostream& out, vector<T> const& v) {
  int l = v.size();
  for (int i = 0; i < l - 1; i++) out << v[i] << ' ';
  if (l > 0) out << v[l - 1];
  return out;
}
const int N = 100100;
set<pair<int, int> > s;
int n, m;
vector<int> x;
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    x.push_back(i);
  }
  int u, v;
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &u, &v);
    s.insert(make_pair(u, v));
    s.insert(make_pair(v, u));
  }
  bool ok = false;
  int cnt = 0;
  for (int i = 0; i < 100; i++) {
    random_shuffle(x.begin(), x.end());
    cnt = 0;
    for (int j = 1; j < n; j++) {
      if (!s.count(make_pair(x[j], x[j - 1]))) cnt++;
    }
    if (n > 2 and !s.count(make_pair(x[n - 1], x[0]))) cnt++;
    if (cnt >= m) {
      ok = true;
      break;
    }
  }
  if (!ok)
    puts("-1");
  else {
    int j = 0;
    for (int i = 1; i < n and j < m; i++) {
      if (!s.count(make_pair(x[i - 1], x[i]))) {
        printf("%d %d\n", x[i - 1], x[i]);
        j++;
      }
    }
    if (j < m) {
      printf("%d %d\n", x[0], x[n - 1]);
    }
  }
  return 0;
}
