#include <bits/stdc++.h>
using namespace std;
const double pi = 3.14159265358979323846;
const double E = 2.7182818284590452354;
const struct __ {
  ios_base::Init i;
  int s;
  __() : s(ios_base::xalloc()) {
    srand(time(NULL));
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
  }
} _;
inline ostream& operator<<(ostream& o, const __&) {
  o.iword(_.s) = 0;
  return o << '\n';
}
template <class T>
inline ostream& operator,(ostream& o, const T& x) {
  if (o.iword(_.s))
    o << ' ';
  else
    o.iword(_.s) = 1;
  return o << x;
}
template <>
inline ostream& operator, <__>(ostream& o, const __&) {
  return o << _;
}
template <class I>
inline void in(I A, I B) {
  while (A != B) {
    cin >> *A;
    ++A;
  }
}
template <class I>
inline void out(I A, I B, char D = ' ') {
  if (A != B) {
    cout << *A;
    while (++A != B) {
      cout << D << *A;
    }
  }
  cout << _;
}
template <class T>
inline T sq(const T& X) {
  return X * X;
}
template <class T>
inline T power(T X, int Y) {
  assert(Y >= 0 && !(X == 0 && Y == 0));
  T R = (Y & 1) ? X : 1;
  while (Y >>= 1) {
    X *= X;
    if (Y & 1) R *= X;
  }
  return R;
}
int trie[100005][26];
int cnt = 1;
bool win(int i) {
  for (int j = 0; j < 26; j++) {
    if (trie[i][j] && win(trie[i][j])) {
      return false;
    }
  }
  return true;
}
bool lose(int i) {
  bool z = false;
  for (int j = 0; j < 26; j++) {
    if (trie[i][j]) {
      z = true;
      if (lose(trie[i][j])) {
        return false;
      }
    }
  }
  return z;
}
template <int N, int M>
struct mat {
  bool x[N][M];
};
template <int N, int M, int K>
mat<N, K> mul(const mat<N, M>& a, const mat<M, K>& b) {
  mat<N, K> res;
  memset(res.x, 0, sizeof(res.x));
  for (int i = 0; i < N; i++) {
    for (int k = 0; k < K; k++) {
      for (int m = 0; m < M; m++) {
        res.x[i][k] = res.x[i][k] || (a.x[i][m] && b.x[m][k]);
      }
    }
  }
  return res;
}
int main() {
  int n, k;
  cin >> n >> k;
  string s;
  s.reserve(100005);
  for (int i = 0; i < n; i++) {
    cin >> s;
    int p = 0;
    for (char c : s) {
      int x = c - 'a';
      if (!trie[p][x]) trie[p][x] = cnt++;
      p = trie[p][x];
    }
  }
  bool w = false, l = false;
  for (int j = 0; j < 26; j++) {
    if (trie[0][j]) {
      w = w || win(trie[0][j]);
      l = l || lose(trie[0][j]);
    }
  }
  mat<1, 4> z = {{false, true, false, true}};
  mat<4, 4> g = {{{false, false, !w, !l},
                  {w, l, false, false},
                  {false, false, !w, !l},
                  {w, l, false, false}}};
  for (; k; k >>= 1) {
    if (k & 1) {
      z = mul(z, g);
    }
    g = mul(g, g);
  }
  cout << ((z.x[0][0] || z.x[0][2]) ? "First" : "Second") << _;
}
