#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int nmax = 1e5;
long long n, m;
long long a[nmax];
long long b[nmax];
long long d[2 * nmax];
int main() {
  cin >> m >> n;
  for (int i = 0; i < n; ++i) {
    scanf("%d", a + i);
  }
  if (a[0] == a[1]) {
    cout << a[0] << ' ' << 0 << endl;
    return 0;
  }
  if (m == n) {
    cout << 1 << ' ' << 1 << endl;
    return 0;
  }
  sort(a, a + n);
  bool swapped = false;
  if (2 * n > m) {
    swapped = true;
    int j = 0;
    int cur = 0;
    for (int i = 0; i < n; ++i) {
      while (cur < a[i]) {
        b[j] = cur;
        ++cur;
        ++j;
      }
      ++cur;
    }
    while (cur < m) {
      b[j] = cur;
      ++cur;
      ++j;
    }
    swap(a, b);
    n = m - n;
  }
  for (int i = 1; i < n; ++i) {
    d[i - 1] = a[i] - a[0];
  }
  for (int i = 1; i < n; ++i) {
    d[n + i - 2] = m - a[i] + a[0];
  }
  int fin_d = -1;
  if (n == 1 || n == m - 1) {
    fin_d = 1;
  }
  sort(d, d + 2 * (n - 1));
  for (int i = 0; i < 2 * (n - 1); ++i) {
    int lft = rand() % n;
    int rgt = lft;
    int cnt = 1;
    while (true) {
      long long nxt = (a[rgt] + d[i]) % m;
      int nxt_pos = lower_bound(a, a + n, nxt) - a;
      if (nxt_pos == n || a[nxt_pos] != nxt) {
        break;
      }
      rgt = nxt_pos;
      ++cnt;
    }
    while (true) {
      long long nxt = (m + a[lft] - d[i]) % m;
      int nxt_pos = lower_bound(a, a + n, nxt) - a;
      if (nxt_pos == n || a[nxt_pos] != nxt) {
        break;
      }
      lft = nxt_pos;
      ++cnt;
    }
    if (cnt == n) {
      fin_d = d[i];
      break;
    }
  }
  if (fin_d == -1) {
    cout << -1 << endl;
    return 0;
  }
  if (swapped) {
    swap(a, b);
    n = m - n;
  }
  int lft = 0;
  int rgt = lft;
  int cnt = 1;
  while (true) {
    long long nxt = (a[rgt] + fin_d) % m;
    int nxt_pos = lower_bound(a, a + n, nxt) - a;
    if (nxt_pos == n || a[nxt_pos] != nxt) {
      break;
    }
    rgt = nxt_pos;
    ++cnt;
  }
  while (true) {
    long long nxt = (m + a[lft] - fin_d) % m;
    int nxt_pos = lower_bound(a, a + n, nxt) - a;
    if (nxt_pos == n || a[nxt_pos] != nxt) {
      break;
    }
    lft = nxt_pos;
    ++cnt;
  }
  assert(cnt == n);
  cout << a[lft] << ' ' << fin_d << endl;
  return 0;
}
