Andrew, Fedor and Alex are inventive guys. Now they invent the game with strings for two players.

Given a group of n non-empty strings. During the game two players build the word together, initially the word is empty. The players move in turns. On his step player must add a single letter in the end of the word, the resulting word must be prefix of at least one string from the group. A player loses if he cannot move.

Andrew and Alex decided to play this game k times. The player who is the loser of the i-th game makes the first move in the (i + 1)-th game. Guys decided that the winner of all games is the player who wins the last (k-th) game. Andrew and Alex already started the game. Fedor wants to know who wins the game if both players will play optimally. Help him.

Input

The first line contains two integers, n and k (1 ≤ n ≤ 105; 1 ≤ k ≤ 109).

Each of the next n lines contains a single non-empty string from the given group. The total length of all strings from the group doesn't exceed 105. Each string of the group consists only of lowercase English letters.

Output

If the player who moves first wins, print "First", otherwise print "Second" (without the quotes).

Examples

Input

2 3
a
b


Output

First


Input

3 1
a
b
c


Output

First


Input

1 2
ab


Output

Second
#include <bits/stdc++.h>
namespace IO {
const int SIZE = (1 << 20) + 1;
char ibuf[SIZE], *iS, *iT, obuf[SIZE], *oS = obuf, *oT = obuf + SIZE - 1;
char _st[55];
int _qr = 0;
inline char gc() {
  return (iS == iT ? iT = (iS = ibuf) + fread(ibuf, 1, SIZE, stdin),
          (iS == iT ? EOF : *iS++) : *iS++);
}
inline void qread() {}
template <class T1, class... T2>
inline void qread(T1 &IEE, T2 &...ls) {
  register T1 __ = 0, ___ = 1;
  register char ch;
  while (!isdigit(ch = gc())) ___ = (ch == '-') ? -___ : ___;
  do {
    __ = (__ << 1) + (__ << 3) + (ch ^ 48);
  } while (isdigit(ch = gc()));
  __ *= ___;
  IEE = __;
  qread(ls...);
  return;
}
template <class T>
inline void QreadArr(T Begin, T End) {
  while (Begin != End) {
    qread(*Begin);
    ++Begin;
  }
}
inline void flush() {
  fwrite(obuf, 1, oS - obuf, stdout);
  oS = obuf;
  return;
}
inline void putc_(char _x) {
  *oS++ = _x;
  if (oS == oT) flush();
}
inline void qwrite() {}
template <class T1, class... T2>
inline void qwrite(T1 IEE, T2... ls) {
  if (!IEE) putc_('0');
  if (IEE < 0) putc_('-'), IEE = -IEE;
  while (IEE) _st[++_qr] = IEE % 10 + '0', IEE /= 10;
  while (_qr) putc_(_st[_qr--]);
  qwrite(ls...);
  return;
}
template <class T>
inline void WriteArr(T Begin, T End) {
  const char Kg = ' ', Edl = '\n';
  while (Begin != End) {
    qwrite(*Begin);
    ++Begin;
    putc_(Kg);
  }
  putc_(Edl);
}
struct Flusher_ {
  ~Flusher_() { flush(); }
} io_flusher;
}  // namespace IO
using namespace IO;
using namespace std;
mt19937_64 rnd(chrono::steady_clock::now().time_since_epoch().count());
long long My_Rand(long long Mod) { return (unsigned long long)(rnd()) % Mod; }
template <class T1, class T2>
T1 Min(const T1 x, const T2 y) {
  return x > y ? y : x;
}
template <class T1, class T2>
T1 Max(const T1 x, const T2 y) {
  return x > y ? x : y;
}
template <class T1, class T2>
void To_max(T1 &x, const T2 y) {
  x < y ? x = y : x = x;
}
template <class T1, class T2>
void To_min(T1 &x, const T2 y) {
  x > y ? x = y : x = x;
}
inline long long qmul(long long x, long long y, long long p) {
  long long l = x * (y >> 25) % p * (1 << 25) % p;
  long long r = x * (y & ((1 << 25) - 1)) % p;
  return (l + r) % p;
}
inline long long qpow(long long n, long long base, long long mod = 1e18) {
  long long ret = 1;
  while (n) {
    if (n & 1) ret = ret * base % mod;
    base = base * base % mod;
    n >>= 1;
  }
  return ret % mod;
}
inline long long gcd(long long x, long long y) {
  return !y ? x : gcd(y, x % y);
}
inline long long lcm(long long x, long long y) { return x / gcd(x, y) * y; }
void InitHash(unsigned long long &base, int &prime, unsigned long long &mod) {
  base = 131, prime = 233317, mod = 212370440130137957ll;
}
const int N = 1e5 + 5;
struct Trie {
  int ch[27];
  bool lst;
} t[N];
int n, k, cnt, len;
string s;
void insert() {
  int rt = 0;
  for (int i = (1); i <= (len); ++i) {
    if (!t[rt].ch[s[i] - 'a' + 1]) t[rt].ch[s[i] - 'a' + 1] = ++cnt;
    rt = t[rt].ch[s[i] - 'a' + 1];
  }
  t[rt].lst = true;
}
int dfs(int u) {
  for (int i = (1); i <= (26); ++i) {
    int v = t[u].ch[i];
    if (v && !dfs(v)) return 1;
  }
  return 0;
}
int dfs2(int u) {
  int isl = 1;
  for (int i = (1); i <= (26); ++i) {
    int v = t[u].ch[i];
    if (v) {
      isl = 0;
      if (!dfs2(v)) return 1;
    }
  }
  return isl ? 1 : 0;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> n >> k;
  for (int i = (1); i <= (n); ++i) {
    cin >> s;
    len = s.size();
    s = ' ' + s;
    insert();
  }
  int l1 = dfs(0);
  if (!l1) {
    puts("Second");
    return 0;
  }
  int l2 = dfs2(0);
  if (l2)
    puts("First");
  else {
    if (k & 1)
      puts("First");
    else
      puts("Second");
  }
  return 0;
}
