#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
map<int, int> M;
int n, m, a[maxn], sum, b[maxn];
long long Pow(long long a, long long b) {
  long long res = 1;
  for (; b; b >>= 1, a = a * a % m)
    if (b & 1) res = res * a % m;
  return res;
}
long long sum2, sumk, sumkq;
int vis[maxn], clk;
bool Check(int x, int d) {
  if (!M[x]) return false;
  if (((long long)n * x % m * x % m + (long long)d * d % m * sumkq % m +
       (long long)2 * x % m * d % m * sumk % m) %
          m !=
      sum2)
    return false;
  b[1] = x;
  for (int i = 2; i <= n; i++) {
    b[i] = (b[i - 1] + d) % m;
    if (!M[b[i]]) return false;
  }
  return true;
}
int main() {
  scanf("%d%d", &m, &n);
  for (int i = 1; i <= n; i++)
    scanf("%d", &a[i]), (sum += a[i]) %= m, M[a[i]]++,
        (sum2 += (long long)a[i] * a[i] % m) %= m;
  for (int i = 1; i <= n - 1; i++)
    (sumk += i) %= m, (sumkq += (long long)i * i % m) %= m;
  if (n == 1) {
    printf("%d 1\n", a[1]);
    return 0;
  }
  for (int i = 2; i <= n; i++) {
    int d = (a[1] - a[i] + m) % m;
    int x = ((long long)sum + m - (((long long)n * (n - 1) / 2) % m) * d % m) %
            m * Pow(n, m - 2) % m;
    x = (x + m) % m;
    if (Check(x, d)) {
      printf("%d %d\n", x, d);
      return 0;
    }
  }
  puts("-1");
  return 0;
}
