#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
inline void smin(T &a, U b) {
  if (a > b) a = b;
}
template <typename T, typename U>
inline void smax(T &a, U b) {
  if (a < b) a = b;
}
inline void gn(int &first) {
  char c, sg = 0;
  while (c = getchar(), (c > '9' || c < '0') && c != '-')
    ;
  for ((c == '-' ? sg = 1, c = getchar() : 0), first = 0; c >= '0' && c <= '9';
       c = getchar())
    first = (first << 1) + (first << 3) + c - '0';
  if (sg) first = -first;
}
inline void gn(long long &first) {
  char c, sg = 0;
  while (c = getchar(), (c > '9' || c < '0') && c != '-')
    ;
  for ((c == '-' ? sg = 1, c = getchar() : 0), first = 0; c >= '0' && c <= '9';
       c = getchar())
    first = (first << 1) + (first << 3) + c - '0';
  if (sg) first = -first;
}
inline void gn(double &first) { scanf("%lf", &first); }
inline void newline() { putchar('\n'); }
template <class T>
inline void print(T first) {
  if (first < 0) {
    putchar('-');
    return print(-first);
  }
  if (first < 10) {
    putchar('0' + first);
    return;
  }
  print(first / 10);
  putchar(first % 10 + '0');
}
int power(int a, int b, int m, int ans = 1) {
  for (; b; b >>= 1, a = 1LL * a * a % m)
    if (b & 1) ans = 1LL * ans * a % m;
  return ans;
}
int a[100010];
map<int, int> p;
int main() {
  int N, M;
  cin >> M >> N;
  for (int i = 0; i < N; i++) gn(a[i]), p[a[i]] = 1;
  if (N == M || N == 1) {
    printf("%d 1\n", a[0]);
    return 0;
  }
  bool flag = 0;
  if (N * 2 > M) {
    N = 0;
    for (int i = 0; i < M; i++)
      if (!p.count(i)) a[N++] = i;
    flag = 1;
  }
  if (N == 1) {
    printf("%d 1\n", (a[0] + 1) % M);
    return 0;
  }
  int d = a[1] - a[0], n = 0;
  if (d < 0) d += M;
  for (int i = 0; i < N; i++) {
    if (!flag && !p.count((a[i] + d) % M)) n++;
    if (flag && p.count((a[i] + d) % M)) n++;
  }
  int dd = (long long)d * power(n, M - 2, M) % M;
  int st = a[0], nn = 0;
  int cur = a[0];
  while (true) {
    if (!flag && !p.count(cur)) break;
    if (flag && p.count(cur)) break;
    st = cur;
    cur = (cur - dd + M) % M;
    nn++;
  }
  cur = (a[0] + dd) % M;
  while (true) {
    if (!flag && !p.count(cur)) break;
    if (flag && p.count(cur)) break;
    cur = (cur + dd) % M;
    nn++;
  }
  if (nn < N) {
    puts("-1");
    return 0;
  }
  if (!flag)
    printf("%d %d\n", st, dd);
  else {
    for (int i = 0; i < M; i++) {
      if (p.count(i)) {
        int k = (i - dd + M) % M;
        if (!p.count(k)) {
          printf("%d %d\n", i, dd);
          return 0;
        }
      }
    }
  }
  return 0;
}
