#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int> edge[110000];
vector<pair<int, int> > R;
set<int> N;
int find(int rt, int to) {
  int i;
  for (i = 0; i < edge[rt].size(); i++) {
    if (edge[rt][i] == to) return 1;
  }
  return 0;
}
int dfs(int rt) {
  if (R.size() == m || R.size() == n - 1) return 1;
  N.erase(rt);
  set<int>::iterator it;
  for (it = N.begin(); it != N.end(); it++) {
    if (find(rt, *it)) continue;
    R.push_back(make_pair(rt, *it));
    if (dfs(*it)) return 1;
    R.pop_back();
    it = N.find(*it);
  }
  N.insert(rt);
  return 0;
}
int main() {
  int a, b, i;
  scanf("%d%d", &n, &m);
  for (i = 1; i <= m; i++) {
    scanf("%d%d", &a, &b);
    edge[a].push_back(b);
    edge[b].push_back(a);
  }
  for (i = 1; i <= n; i++) {
    N.insert(i);
  }
  for (i = 1; i <= n; i++) {
    if (dfs(i)) {
      if (n == m) R.push_back(make_pair(R[0].first, R[R.size() - 1].second));
      for (i = 0; i < m; i++) printf("%d %d\n", R[i].first, R[i].second);
      return 0;
    }
  }
  puts("-1");
  return 0;
}
