#include <bits/stdc++.h>
using namespace std;
long long rev(long long a, long long m) {
  long long pow = m - 2;
  long long res = 1;
  while (pow) {
    if (pow & 1) res = res * a % m;
    a = a * a % m;
    pow >>= 1;
  }
  return res;
}
bool forms(long long first, long long d, long long *x, long long n,
           long long m) {
  set<long long> s;
  for (int i = 0; i < n; ++i) s.insert(x[i]);
  while (!s.empty() && s.find(first) != s.end()) {
    s.erase(first);
    first = (first + d) % m;
  }
  return s.empty();
}
int main() {
  ios::sync_with_stdio(false);
  long long n, m;
  cin >> m >> n;
  long long *x = new long long[n];
  long long a = 0, b = 0;
  for (int i = 0; i < n; ++i) {
    cin >> x[i];
    a = (a + x[i]) % m;
    b = (b + x[i] * x[i]) % m;
  }
  long long r = rev(n * (n - 1) / 2 % m, m);
  for (int i = 0; i < n; ++i) {
    long long v = ((a - n * x[i]) % m + m) % m;
    long long d = v * r % m;
    if (n * (n - 1) / 2 % m == 0 && a == 0) d = 1;
    long long first = n * x[i] % m * x[i] % m,
              second = n * (n - 1) % m * x[i] % m * d % m,
              third = n * (n - 1) * (2 * n - 1) / 6 % m * d % m * d % m;
    if ((first + second + third) % m == b)
      if (forms(x[i], d, x, n, m)) {
        cout << x[i] << " " << d << endl;
        return 0;
      }
  }
  cout << -1 << endl;
  return 0;
}
