#include <bits/stdc++.h>
using namespace std;
bool vis[100011];
bool iscycle = 0;
vector<int> ut;
int num = 0;
vector<int> g[100011];
void dfs(int v) {
  vis[v] = 1;
  ut.push_back(v);
  num++;
  int cnt = 0;
  for (auto x : g[v]) {
    if (!vis[x]) {
      dfs(x);
    } else {
      cnt++;
    }
  }
  if (cnt > 1) {
    iscycle = 1;
  }
}
int main() {
  int n, m, a, b;
  cin >> n >> m;
  set<pair<long long int, long long int> > edges;
  vector<pair<long long int, long long int> > e;
  for (int i = 0; i < m; i++) {
    cin >> a >> b;
    a--, b--;
    g[a].push_back(b);
    g[b].push_back(a);
    e.push_back({a, b});
    edges.insert({a, b});
  }
  vector<int> v;
  for (int i = 0; i < n; i++) {
    v.push_back(i);
  }
  bool ok = 1;
  for (int p = 0; p < 200; p++) {
    ok = 1;
    random_shuffle(v.begin(), v.end());
    for (int i = 0; i < m; i++) {
      if (edges.count({v[i], v[(i + 1) % n]}) or
          edges.count({v[(i + 1) % n], v[i]})) {
        ok = 0;
        break;
      }
    }
    if (ok) break;
  }
  if (!ok) {
    cout << -1;
    return 0;
  }
  for (int i = 0; i < m; i++) {
    cout << v[i] + 1 << " " << v[(i + 1) % n] + 1 << "\n";
  }
}
