#include <bits/stdc++.h>
using namespace std;
const int inf = 1.01e9;
const double eps = 1e-9;
const int N = 1e5 + 10;
int a[N];
int rev(int x, int m) {
  if (x == 1) return 1;
  return (1 - rev(m % x, x) * (long long)m) / x + m;
}
unordered_set<int> second;
int main() {
  int m, n;
  if (1) {
    scanf("%d%d", &m, &n);
    for (int i = 0; (i) < (n); ++i) scanf("%d", &a[i]);
  } else {
    m = 1e9 + 7;
    n = 1e5;
    int A = 123123;
    int B = 31231321;
    a[0] = A;
    for (int i = 1; i < n; ++i) a[i] = (a[i - 1] + B) % m;
    for (int i = 1; i < n; ++i) {
      int j = (rand() * (1LL << (15)) + rand()) % (i + 1);
      swap(a[i], a[j]);
    }
  }
  if (n == m) {
    printf("0 1\n");
    return 0;
  }
  if (n == 1) {
    printf("%d 1\n", a[0]);
    return 0;
  }
  int s = 0;
  for (int i = 0; (i) < (n); ++i) s = (s + a[i]) % m;
  int ss = 0;
  for (int i = 0; (i) < (n); ++i) ss = (ss + a[i] * (long long)a[i]) % m;
  vector<pair<int, int> > sols;
  int s1 = (n * (long long)(n - 1) / 2) % m;
  int s2 = (n * (long long)(n - 1) * (2 * n - 1) / 6) % m;
  for (int i = 0; (i) < (n); ++i) {
    int aa = a[i];
    int bb = (s - aa * (long long)n % m + m) % m * (long long)rev(s1, m) % m;
    int cc =
        ((long long)aa * aa % m * n + n * (long long)(n - 1) % m * bb % m * aa +
         bb * (long long)bb % m * s2) %
        m;
    if (cc == ss) {
      sols.push_back({aa, bb});
    }
  }
  for (int i = 0; (i) < (n); ++i) second.insert(a[i]);
  for (pair<int, int> z : sols) {
    int aa = z.first;
    int bb = z.second;
    if (bb == 0) continue;
    int ok = 1;
    for (int i = 0; (i) < (n); ++i) {
      if (second.find(aa) == second.end()) {
        ok = 0;
        break;
      }
      aa = (aa + bb) % m;
    }
    if (ok) {
      printf("%d %d\n", z.first, z.second);
      return 0;
    }
  }
  printf("-1\n");
  return 0;
}
