#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, a[N], m, b[N], p;
set<int> q;
int gcd(int a, int b, int &x, int &y) {
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  int tx, ty;
  gcd(b, a % b, tx, ty);
  x = ty;
  y = tx - a / b * ty;
}
int solve(int a[N], int n) {
  sort(a + 1, a + n + 1);
  int x = a[2] - a[1], cnt = 0, k = 0, d = 0, _k, _m;
  for (int i = 1; i <= n; i++) cnt += int(q.find((a[i] + x) % m) != q.end());
  k = n - cnt;
  gcd(k, m, _k, _m);
  d = ((1LL * x * _k) % m + m) % m;
  return d;
}
int main() {
  cin >> m >> n;
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), q.insert(a[i]);
  if (n == 1) {
    cout << a[1] << " 0";
    return 0;
  }
  if (n == m) {
    cout << 0 << ' ' << 1;
    return 0;
  }
  int x, d;
  if (2 * (n - 1) >= m) {
    for (int i = 0; i < m; i++)
      if (q.find(i) == q.end()) b[++p] = i;
    q.clear();
    for (int i = 1; i <= p; i++) q.insert(b[i]);
    d = solve(b, p);
    for (int i = 1; i <= p; i++)
      if (q.find(((b[i] - d) % m + m) % m) == q.end()) x = b[i];
    for (int i = 1; i <= p; i++) a[i] = (1LL * (i - 1) * d + x) % m;
    sort(a + 1, a + p + 1);
    for (int i = 1; i <= p; i++)
      if (a[i] != b[i]) {
        cout << -1;
        return 0;
      }
    x = ((x - 1LL * n * d) % m + m) % m;
    cout << x << ' ' << d;
  } else {
    d = solve(a, n);
    for (int i = 1; i <= n; i++)
      if (q.find(((a[i] - d) % m + m) % m) == q.end()) x = a[i];
    for (int i = 1; i <= n; i++) b[i] = (1LL * (i - 1) * d + x) % m;
    sort(b + 1, b + n + 1);
    for (int i = 1; i <= n; i++)
      if (a[i] != b[i]) {
        cout << -1;
        return 0;
      }
    cout << x << ' ' << d;
  }
}
