#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void Qmin(T &a, const T b) {
  if (b < a) a = b;
}
template <class T>
inline void Qmax(T &a, const T b) {
  if (a < b) a = b;
}
const int inf = 0x3f3f3f3f;
const long long llinf = 0x3f3f3f3f3f3f3f3fLL;
const double pi = acos(-1.0);
typedef priority_queue<int, vector<int>, greater<int> > spq;
inline int Qceil(int x, int y) { return x ? (x - 1) / y + 1 : 0; }
inline double round(double x) {
  return x > 0.0 ? floor(x + 0.5) : ceil(x - 0.5);
}
int cas;
const int mx = 1e6 + 5;
char s[mx];
struct Trie {
  int ch[mx][26], sz;
  Trie() { memset(ch, 0, sizeof(ch)), sz = 0; }
  void read(int n) {
    int i;
    for (i = 0; i < (n); ++i) scanf("%s", s), insert(s);
  }
  void insert(char *s) {
    for (int i = 0, u = 0, *v; s[i]; u = *v, ++i)
      if (v = &ch[u][s[i] - 'a'], !*v) *v = ++sz;
  }
  int dfs(int u = 0) {
    bool isleaf = true;
    int ans = 0, i;
    for (i = 0; i < (26); ++i)
      if (ch[u][i]) isleaf = false, ans |= dfs(ch[u][i]) ^ 3;
    return isleaf ? 1 : ans;
  }
} trie;
int main() {
  int n, k, i;
  scanf("%d%d", &n, &k);
  trie.read(n);
  int ans = trie.dfs();
  puts(ans == 3 || ans == 2 && k & 1 ? "First" : "Second");
  return 0;
}
