#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void smax(T &x, T y) {
  x = max((x), (y));
}
template <class T>
inline void smin(T &x, T y) {
  x = min((x), (y));
}
const int MOD = 1e9 + 7;
const int SIZE = 3 * 1e2 + 10;
const int INF = 0x3f3f3f3f;
typedef int Mat[SIZE][SIZE];
int n, T;
int A[SIZE];
Mat a, mt, tmp;
void mult(const Mat foo, const Mat bar, Mat r) {
  for (int i = 0; i < (n); ++i)
    for (int j = 0; j < (n); ++j) {
      tmp[i][j] = -INF;
      for (int k = 0; k < (n); ++k) {
        smax(tmp[i][j], foo[i][k] + bar[k][j]);
      }
    }
  for (int i = 0; i < (n); ++i)
    for (int j = 0; j < (n); ++j) r[i][j] = tmp[i][j];
}
int main() {
  if (0) {
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
  }
  while (scanf("%d%d", &(n), &(T)) == 2) {
    for (int i = 0; i < (n); ++i) {
      scanf("%d", &(A[i]));
    }
    for (int s = 0; s < (n); ++s) {
      for (int i = 0; i < (n); ++i) {
        if (A[i] < A[s]) {
          a[s][i] = -INF;
        } else {
          a[s][i] = 1;
          for (int j = 0; j < (i); ++j)
            if (A[i] >= A[j]) smax(a[s][i], a[s][j] + 1);
        }
      }
    }
    memset((mt), 0, sizeof((mt)));
    for (int p = T; p > 0; p >>= 1, mult(a, a, a))
      if (p & 1) mult(a, mt, mt);
    int ma = 0;
    for (int i = 0; i < (n); ++i)
      for (int j = 0; j < (n); ++j) smax(ma, mt[i][j]);
    printf("%d\n", ma);
  }
  return 0;
}
