#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int v[N];
set<long long> ls, nls;
int m, n;
long long fast(long long a, long long b) {
  if (!b) return 1;
  long long res = fast(a, b / 2);
  if (b & 1) return (((res * res) % m) * a) % m;
  return (res * res) % m;
}
int main() {
  scanf("%d%d", &m, &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &v[i]);
    ls.insert(v[i]);
  }
  if (n == 1) {
    cout << v[0] << " " << 0 << endl;
    return 0;
  }
  sort(v, v + n);
  bool f = false;
  int pn;
  if (2 * n > m) {
    int c = 0;
    pn = n;
    for (int i = 0; i < m; i++) {
      if (ls.find(i) == ls.end()) {
        v[c] = i;
        nls.insert(i);
        c++;
      }
    }
    f = 1;
    n = nls.size();
    swap(ls, nls);
  }
  int x = (v[1] - v[0] + m) % m, k = 0;
  for (int i = 0; i < n; i++) {
    if (ls.find((v[i] + 0LL + x) % m) != ls.end()) k++;
  }
  k = n - k;
  if (!k) {
    cout << v[0] << " " << (v[1] - v[0]) << endl;
    return 0;
  }
  int d = (x * 1LL * fast(k, m - 2)) % m, st = 0, c = 0, s;
  long long on = v[0];
  while (ls.find(on) != ls.end() && c < n) {
    st = on;
    on = (on - d + m) % m;
    c++;
  }
  c = 0;
  s = st;
  while (ls.find(st) != ls.end() && c < n) {
    st = (st + d) % m;
    c++;
  }
  if (c == n) {
    if (!f)
      cout << s << " " << d << endl;
    else {
      cout << (s + ((m - pn) * 1LL * d) % m) % m << " " << d << endl;
    }
    return 0;
  } else
    puts("-1");
  return 0;
}
