You are given an array of positive integers a_1, a_2, ..., a_{n} × T of length n × T. We know that for any i > n it is true that a_{i} = a_{i} - n. Find the length of the longest non-decreasing sequence of the given array.


-----Input-----

The first line contains two space-separated integers: n, T (1 ≤ n ≤ 100, 1 ≤ T ≤ 10^7). The second line contains n space-separated integers a_1, a_2, ..., a_{n} (1 ≤ a_{i} ≤ 300).


-----Output-----

Print a single number — the length of a sought sequence.


-----Examples-----
Input
4 3
3 1 4 2

Output
5



-----Note-----

The array given in the sample looks like that: 3, 1, 4, 2, 3, 1, 4, 2, 3, 1, 4, 2. The elements in bold form the largest non-decreasing subsequence.

Difficulty: competition

Starter code:

Solutions:
f = lambda: map(int, input().split())
n, m = f()
t = list(f())
d = {i: j for j, i in enumerate(sorted(set(t)))}
t = [d[i] for i in t]
k = len(d)
a = [0] * k
if m < 2 * k:
    for j in t * m:
        a[j] += 1
        q = a[j]
        j += 1
        while j < k and a[j] < q:
            a[j] += 1
            j += 1
    print(a[-1])
    return
a = [0] * k
for j in t * k:
    a[j] += 1
    q = a[j]
    j += 1
    while j < k and a[j] < q:
        a[j] += 1
        j += 1
b = [0] * k
t.reverse()
for j in t * k:
    b[j] += 1
    q = b[j]
    j -= 1
    while j > -1 and b[j] < q:
        b[j] += 1
        j -= 1
print(max(a[j] + (m - 2 * k) * t.count(j) + b[j] for j in range(k)))

f = lambda: map(int, input().split())
n, m = f()
t = list(f())
s = [0] * 301
d = s[:]
for i in t: d[i] += 1
for i in t * min(m, 2 * n): s[i] = max(s[:i + 1]) + 1
print(max(s) + max((m - n * 2) * max(d), 0))

f = lambda: list(map(int, input().split()))
n, m = f()
t = list(f())
s = [0] * 301
d = s[:]
for i in t: d[i] += 1
for i in t * min(m, 2 * n): s[i] = max(s[:i + 1]) + 1
print(max(s) + max((m - n * 2) * max(d), 0))


f = lambda: list(map(int, input().split()))
n, m = f()
t = list(f())
s = [0] * 301
d = s[:]
for i in t: d[i] += 1
for i in t * min(m, 2 * n): s[i] = max(s[:i + 1]) + 1
print(max(s) + max((m - n * 2) * max(d), 0))


f = lambda: list(map(int, input().split()))
n, m = f()
t = list(f())
s = [0] * 301
d = s[:]
for i in t: d[i] += 1
for i in t * min(m, 2 * n): s[i] = max(s[:i + 1]) + 1
print(max(s) + max((m - n * 2) * max(d), 0))


f = lambda: list(map(int, input().split()))
n, m = f()
t = list(f())
s = [0] * 301
d = s[:]
for i in t: d[i] += 1
for i in t * min(m, 2 * n): s[i] = max(s[:i + 1]) + 1
print(max(s) + max((m - n * 2) * max(d), 0))


f = lambda: list(map(int, input().split()))
n, m = f()
t = list(f())
s = [0] * 301
d = s[:]
for i in t: d[i] += 1
for i in t * min(m, 2 * n): s[i] = max(s[:i + 1]) + 1
print(max(s) + max((m - n * 2) * max(d), 0))


f = lambda: list(map(int, input().split()))
n, m = f()
t = list(f())
s = [0] * 301
d = s[:]
for i in t: d[i] += 1
for i in t * min(m, 2 * n): s[i] = max(s[:i + 1]) + 1
print(max(s) + max((m - n * 2) * max(d), 0))


f = lambda: list(map(int, input().split()))
n, m = f()
t = list(f())
s = [0] * 301
d = s[:]
for i in t: d[i] += 1
for i in t * min(m, 2 * n): s[i] = max(s[:i + 1]) + 1
print(max(s) + max((m - n * 2) * max(d), 0))


f = lambda: list(map(int, input().split()))
n, m = f()
t = list(f())
s = [0] * 301
d = s[:]
for i in t: d[i] += 1
for i in t * min(m, 2 * n): s[i] = max(s[:i + 1]) + 1
print(max(s) + max((m - n * 2) * max(d), 0))


f = lambda: list(map(int, input().split()))

n, m = f()

t = list(f())

s = [0] * 301

d = s[:]

for i in t: d[i] += 1

for i in t * min(m, 2 * n): s[i] = max(s[:i + 1]) + 1

print(max(s) + max((m - n * 2) * max(d), 0))




# Made By Mostafa_Khaled


f = lambda: map(int, input().split())
 
n, m = f()
 
t = list(f())
 
s = [0] * 301
 
d = s[:]
 
for i in t: d[i] += 1
 
for i in t * min(m, 2 * n): s[i] = max(s[:i + 1]) + 1
 
print(max(s) + max((m - n * 2) * max(d), 0))