#include<bits/stdc++.h>
#define ll long long
#define N 200010
using namespace std;
template <typename T> void read(T &x){
	x=0;char c=getchar();int fh=1;
	while (!isdigit(c)){if (c=='-')fh=-1;c=getchar();}
	while (isdigit(c))x=x*10+c-'0',c=getchar();
	x*=fh;
}
int n,a[N];
bool pa(int x){
	priority_queue<int> b;
	unordered_map<int,int> c;c.clear();
	while (!b.empty()) b.pop();
	for (int i=1;i<=n;i++){
		if (a[i]<=a[i-1]){
			if (x==1) return false;
			while (!b.empty()&&b.top()>a[i]){c[b.top()]=0;b.pop();}
			c[a[i]]++;if (c[a[i]]==1) b.push(a[i]);
			int y=a[i];
			while (c[y]>=x){
				b.pop();c[y]=0;
				if (y==1) return false;
				y--;c[y]++;if (c[y]==1) b.push(y);
			}
		}
	}
	return true;
}
int main(){
	read(n);
	for (int i=1;i<=n;i++)read(a[i]);
	int l=1,r=n,mid;
	if (n>100) if (pa(100)) r=100;
	while (l<r){
		mid=(l+r)/2;
		if (pa(mid)) r=mid;else l=mid+1;
	}
	cout<<l<<endl;
	return 0;
}