Toad Zitz has an array of integers, each integer is between $0$ and $m-1$ inclusive. The integers are $a_1, a_2, \ldots, a_n$.

In one operation Zitz can choose an integer $k$ and $k$ indices $i_1, i_2, \ldots, i_k$ such that $1 \leq i_1 < i_2 < \ldots < i_k \leq n$. He should then change $a_{i_j}$ to $((a_{i_j}+1) \bmod m)$ for each chosen integer $i_j$. The integer $m$ is fixed for all operations and indices.

Here $x \bmod y$ denotes the remainder of the division of $x$ by $y$.

Zitz wants to make his array non-decreasing with the minimum number of such operations. Find this minimum number of operations.


-----Input-----

The first line contains two integers $n$ and $m$ ($1 \leq n, m \leq 300\,000$) — the number of integers in the array and the parameter $m$.

The next line contains $n$ space-separated integers $a_1, a_2, \ldots, a_n$ ($0 \leq a_i < m$) — the given array.


-----Output-----

Output one integer: the minimum number of described operations Zitz needs to make his array non-decreasing. If no operations required, print $0$.

It is easy to see that with enough operations Zitz can always make his array non-decreasing.


-----Examples-----
Input
5 3
0 0 0 1 2

Output
0

Input
5 7
0 6 1 3 2

Output
1



-----Note-----

In the first example, the array is already non-decreasing, so the answer is $0$.

In the second example, you can choose $k=2$, $i_1 = 2$, $i_2 = 5$, the array becomes $[0,0,1,3,3]$. It is non-decreasing, so the answer is $1$.

```python

USER_FILENAME = "<user_code>"
import sys, json, builtins
import math, heapq, bisect, itertools, functools, collections, statistics, fractions, decimal, operator, array, random, re, string, os, pathlib
try:
    import resource as _res
except Exception:
    _res = None
from collections import Counter, defaultdict, deque, OrderedDict
from functools import lru_cache, reduce
from itertools import accumulate, permutations, combinations, product
from math import gcd, ceil, floor, sqrt
from decimal import Decimal
try:
    from typing import *
except Exception:
    pass
try:
    sys.setrecursionlimit(1_000_000)
except Exception:
    pass
try:
    import site as _site
    try:
        _sys_sites = _site.getsitepackages() if hasattr(_site, "getsitepackages") else []
        for _p in _sys_sites:
            if _p and _p not in sys.path:
                sys.path.append(_p)
    except Exception:
        pass
    try:
        _usp = _site.getusersitepackages()
        if isinstance(_usp, str):
            _usp = [_usp]
        for _p in _usp:
            if _p and _p not in sys.path:
                sys.path.append(_p)
    except Exception:
        pass
except Exception:
    pass

ns = {"__name__": "__main__"}
for _k, _v in list(globals().items()):
    if not _k.startswith("_"):
        ns[_k] = _v
_CODE = '#First we notice that the number of overall operations is equal to the maximum number\n#of operations used on a single index.Next we notice that, if we can solve the problem\n#in <= X operations, then we can also solve it in <= X + 1 operations.\n#This is a monotonic sequence, so we can solve for the minimum value of X with binary search.\n#we have to check wether each element can be changed into\n#its previous element(count) in the list using a specified number of operations\n#if its not possible then we have to check wether current element is greater\n#than the previosu element , if it is so, then we have no need to change\n#as the list is already in non decreaing form, then we simply replace\n#count with the current element\n#if it is lesser than count, then there is no way to make the element\n#greater than or equal to the previous element using specified number of\n#operations and we return to the binary search part to get the next no. of\n#operations\ndef checker(ij):\n    count=0\n    for i in range(len(l)):\n        #print(count)\n        #print(((count-l[i])%m),ij)\n        if ((count-l[i])%m)>=ij:\n            if l[i]>count:\n                count=l[i]\n            else:\n                return False\n    #print(l)\n    return True\nn,m=input().split()\nn,m=[int(n),int(m)]\nl=[int(i) for i in input().split()]\nbeg=-1\nlast=m\nwhile beg<last-1:\n    mid=(beg+last)//2\n    counter=checker(mid)\n    #print(beg,last)\n    if counter:\n        last=mid\n    else:\n        beg=mid\nprint(beg)\n'
_co = compile(_CODE, USER_FILENAME, "exec")
exec(_co, ns, ns)

```

Measured memory_bytes: 13171