Ivan has got an array of n non-negative integers a1, a2, ..., an. Ivan knows that the array is sorted in the non-decreasing order. 

Ivan wrote out integers 2a1, 2a2, ..., 2an on a piece of paper. Now he wonders, what minimum number of integers of form 2b (b ≥ 0) need to be added to the piece of paper so that the sum of all integers written on the paper equalled 2v - 1 for some integer v (v ≥ 0). 

Help Ivan, find the required quantity of numbers.

Input

The first line contains integer n (1 ≤ n ≤ 105). The second input line contains n space-separated integers a1, a2, ..., an (0 ≤ ai ≤ 2·109). It is guaranteed that a1 ≤ a2 ≤ ... ≤ an.

Output

Print a single integer — the answer to the problem.

Examples

Input

4
0 1 1 1


Output

0


Input

1
3


Output

3

Note

In the first sample you do not need to add anything, the sum of numbers already equals 23 - 1 = 7.

In the second sample you need to add numbers 20, 21, 22.
import java.io.*;
import java.util.*;

public class C {
	FastScanner in;
	PrintWriter out;

	void solve() throws IOException {
		int n = in.nextInt();
		TreeMap<Long, Integer> map = new TreeMap<>();
		for (int i = 0; i < n; i++) {
			long x = in.nextLong();
			if (map.containsKey(x)) {
				map.put(x, map.get(x) + 1);
			} else {
				map.put(x, 1);
			}
		}
		long ans = 0;
		long last = 0;
		while (!map.isEmpty()) {
			long x = map.firstKey();
			int cnt = map.get(x);
			map.remove(x);
			ans += x - last;
			if ((cnt & 1) == 0) {
				++ans;
			}
			last = x + 1;
			if (cnt > 1) {
				if (!map.containsKey(x + 1)) {
					map.put(x + 1, cnt >> 1);
				} else {
					map.put(x + 1, map.get(x + 1) + (cnt >> 1));
				}
			}
		}
		out.println(ans);
	}

	public void run() {
		try {
			InputStream inputStream = System.in;
			File inFile = new File("c.in");
			if (inFile.exists() && inFile.canRead()) {
				inputStream = new FileInputStream(inFile);
			}
			in = new FastScanner(inputStream);
			out = new PrintWriter(System.out);
			solve();
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
			System.exit(239);
		}
	}

	private class FastScanner {
		BufferedReader br;
		StringTokenizer st;

		public FastScanner(InputStream is) {
			br = new BufferedReader(new InputStreamReader(is));
		}

		public boolean hasNext() throws IOException {
			while (st == null || !st.hasMoreTokens()) {
				String line = br.readLine();
				if (line == null) {
					return false;
				}
				st = new StringTokenizer(line);
			}
			return true;
		}

		public String next() throws IOException {
			if (hasNext()) {
				return st.nextToken();
			}
			return null;
		}

		public int nextInt() throws IOException {
			return Integer.parseInt(next());
		}

		public long nextLong() throws IOException {
			return Long.parseLong(next());
		}

		public double nextDouble() throws IOException {
			return Double.parseDouble(next());
		}
	}

	public static void main(String[] args) {
		new C().run();
	}
}
