Problem: In a far away galaxy there is war again. The treacherous Republic made k precision strikes of power ai on the Empire possessions. To cope with the republican threat, the Supreme Council decided to deal a decisive blow to the enemy forces. 

To successfully complete the conflict, the confrontation balance after the blow should be a positive integer. The balance of confrontation is a number that looks like <image>, where p = n! (n is the power of the Imperial strike), <image>. After many years of war the Empire's resources are low. So to reduce the costs, n should be a minimum positive integer that is approved by the commanders.

Help the Empire, find the minimum positive integer n, where the described fraction is a positive integer.

Input

The first line contains integer k (1 ≤ k ≤ 106). The second line contains k integers a1, a2, ..., ak (1 ≤ ai ≤ 107).

Output

Print the minimum positive integer n, needed for the Empire to win.

Please, do not use the %lld to read or write 64-but integers in С++. It is preferred to use the cin, cout streams or the %I64d specificator.

Examples

Input

2
1000 1000


Output

2000

Input

1
2


Output

2

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
const int maxprime = 1e7 + 2, up = sqrt(maxprime);
int prime[maxprime];
inline void sieve() {
  for (int i = 0; i < maxprime; i++) prime[i] = i;
  for (int i = 2; i < maxprime; i += 2) prime[i] = 2;
  for (int i = 3; i <= up; i += 2) {
    if (prime[i] != i) continue;
    int lim = i * i;
    int add = 2 * i;
    for (int j = lim; j < maxprime; j += add) {
      if (prime[j] == j) prime[j] = i;
    }
  }
}
int freq[maxprime], tmp, k;
long long occ[maxprime], ans = 1;
long long bsrch(long long l, long long r, int v) {
  if (l == r) return l;
  long long mid = (l + r) / 2, tmp = mid, tot = 0;
  while (tmp) {
    tmp /= v;
    tot += tmp;
  }
  if (tot >= occ[v])
    return bsrch(l, mid, v);
  else
    return bsrch(mid + 1, r, v);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  sieve();
  cin >> k;
  for (int i = 0; i < k; i++) {
    cin >> tmp;
    freq[1]++;
    freq[tmp + 1]--;
  }
  for (int i = 1; i < maxprime; i++) freq[i] += freq[i - 1];
  for (int i = 2; i < maxprime; i++) {
    if (freq[i] == 0) break;
    tmp = i;
    while (tmp > 1) {
      k = prime[tmp];
      while (tmp % k == 0) {
        tmp /= k;
        occ[k] += freq[i];
      }
    }
  }
  for (int i = 2; i < maxprime; i++) {
    if (occ[i] == 0) continue;
    ans = max(ans, bsrch(1, 1e13, i));
  }
  cout << ans;
  return 0;
}