#include <bits/stdc++.h>
using namespace std;
#define int ll
#define ll long long
#define I32_MAX 2147483647
#define I64_MAX 9223372036854775807LL
#define I64_MAX2 1223372036854775807LL
#define INF I64_MAX2
#define MOD 1000000007
// #define MOD 998244353
#define MEM_SIZE 101010
#define DEBUG_OUT true
#define ALL(x) (x).begin(), (x).end()

template <typename T>
void DEBUG(T e)
{
  if (DEBUG_OUT == false)
    return;
  std::cout << e << " ";
}
template <typename T>
void DEBUG(const std::vector<T> &v)
{
  if (DEBUG_OUT == false)
    return;
  for (const auto &e : v)
  {
    std::cout << e << " ";
  }
  std::cout << std::endl;
}
template <typename T>
void DEBUG(const std::vector<std::vector<T>> &vv)
{
  if (DEBUG_OUT == false)
    return;
  for (const auto &v : vv)
  {
    DEBUG(v);
  }
}
template <class T, class... Ts>
void DEBUG(T d, Ts... e)
{
  if (DEBUG_OUT == false)
    return;
  DEBUG(d);
  DEBUG(e...);
}
template <class T>
void corner(bool flg, T hoge)
{
  if (flg)
  {
    cout << hoge << endl;
    abort();
  }
}
template <typename T1, typename T2>
inline bool chmax(T1 &a, T2 b) { return a < b && (a = b, true); }
template <typename T1, typename T2>
inline bool chmin(T1 &a, T2 b) { return a > b && (a = b, true); }

//BELOW

//https://atcoder.jp/contests/agc036/submissions/6479142
void solve(void)
{

  int n, k;
  cin >> n >> k;
  vector<int> vec(n, 0);
  for (int i = 0; i < n; i++)
  {
    cin >> vec[i];
  }
  for (int i = 0; i < n; i++)
  {
    vec.push_back(vec[i]);
  }
  vector<vector<int>> ps(62, vector<int>(2 * 101010, 0));
  int max_n = 2 * 101010;
  map<int, int> lf;
  for (int i = n * 2 - 1; i >= 0; i--)
  {
    if (i < n)
    {
      ps[0][i] = lf[vec[i]] - i + 1;
    }
    lf[vec[i]] = i;
  }
  //ダブリングの結果を降順に見て超えないように足す　これがわからなかった
  for (int i = 0; i < 62 - 1; i++)
  {
    for (int j = 0; j < max_n; j++)
    {
      if (ps[i][j] == INF)
        ps[i + 1][j] = INF;
      else
      {
        ps[i + 1][j] = ps[i][j] + ps[i][(j + ps[i][j]) % n];
        if (ps[i + 1][j] > INF)
          ps[i + 1][j] = INF;
      }
    }
  }

  int len = n * k;
  int p = 0;
  for (int i = 62 - 1; i >= 0; i--)
  {
    if (p + ps[i][p % n] <= len)
    {
      p += ps[i][p % n];
    }
  }
  vector<int> res;
  set<int> st;
  for (int i = p; i < len; i++)
  {
    int x = vec[i % n];
    if (st.count(x))
    {
      while (st.count(x))
      {
        st.erase(res.back());
        res.pop_back();
      }
    }
    else
    {
      res.push_back(x);
      st.insert(x);
    }
  }
  if (vec.empty())
    return;
  for (int i = 0; i < res.size(); i++)
  {
    if (i != 0)
      cout << char(32);
    cout << res[i];
  }
  cout << endl;
  // map<int, vector<int>> vec2;
  // for (int i = 0; i < n; i++)
  // {
  //   vec2[vec[i]].push_back(i);
  //   vec2[vec[i]].push_back(i + n);
  // }
  // // for (int i = 0; i < n; i++)
  // // {
  // //   if (vec2[i].empty())
  // //     continue;
  // //   sort(ALL(vec2[i]));
  // // }

  // for (auto &x : vec2)
  // {
  //   sort(ALL(x.second));
  // }

  // // DEBUG(vec2);

  // vector<int> loop(2 * n, 0);
  // // DEBUG(loop);
  // // DEBUG(vec2);

  // for (auto &x : vec2)
  // {
  //   // DEBUG(i);

  //   for (int j = 0; j < x.second.size() - 1; j++)
  //   {
  //     if (x.second[j] >= n)
  //       break;
  //     loop[x.second[j]] = x.second[j + 1] + 1;
  //   }
  // }

  // int l = 0;
  // int pos = 0;
  // while (true)
  // {
  //   int next = loop[pos];
  //   if (next >= n)
  //     l++;
  //   next %= n;
  //   // DEBUG(pos, next, "\n");
  //   if (next == 0)
  //     break;
  //   pos = next;
  // }
  // // DEBUG(loop, l);
  // k %= l;
  // l = 0;
  // pos = 0;
  // while (true)
  // {
  //   int next = loop[pos];
  //   if (next >= n)
  //     l++;
  //   next %= n;
  //   // DEBUG(pos, next, "\n");
  //   if (l >= k)
  //     break;
  //   pos = next;
  // }
  // vector<int> res;
  // if (pos == 0)
  //   return;
  // for (int i = pos; i < n; i++)
  // {
  //   res.push_back(vec[i]);
  //   int lc = res.size();
  //   for (int j = 0; j < lc - 1; j++)
  //   {
  //     int vback = res.back();
  //     if (vback == res[j])
  //     {
  //       // DEBUG(vback);
  //       while (res.size() > j)
  //       {
  //         // DEBUG(res);
  //         res.pop_back();
  //       }
  //       break;
  //     }
  //   }
  // }

  // for (int i = 0; i < res.size(); i++)
  // {
  //   if (i != 0)
  //     cout << char(32);
  //   cout << res[i];
  // }
  // cout << endl;

  return;
}
int32_t main(int32_t argc, const char *argv[])
{
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);

  std::cout << std::fixed;
  std::cout << std::setprecision(11);
  solve();

  return 0;
}


Measured memory_bytes: 127648