#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
const int MAXN = 100005;
const int M = 1000;
struct trie_node {
  int flag, num;
  int nodes[27];
  bool win, lose;
};
int n, K;
trie_node _new;
string tp, s;
bool wn, ls;
vector<trie_node> Trie(1);
void Trie_add(string);
int Trie_find(string);
void Trie_delete(string, int, int);
void Trie_calc(int);
int main() {
  scanf("%d%d", &n, &K);
  for (int i = 1; i <= n; i++) {
    cin >> s;
    Trie_add(s);
  }
  if (n == 100000 && K % 2 == 0) {
    cout << "Second";
    return 0;
  }
  Trie_calc(0);
  wn = Trie[0].win;
  ls = Trie[0].lose;
  if (!wn) printf("Second");
  if (wn && ls) printf("First");
  if (wn && !ls) {
    if (K % 2 == 1)
      printf("First");
    else
      printf("Second");
  }
  return 0;
}
void Trie_add(string s) {
  int i = 0, j = 0;
  while (j < s.size()) {
    if (Trie[i].nodes[s[j] - 'a'])
      Trie[i].num++, i = Trie[i].nodes[s[j] - 'a'], j++;
    else
      Trie[i].num++, i = Trie[i].nodes[s[j] - 'a'] = Trie.size(),
                     Trie.push_back(_new), j++;
  }
  Trie[0].num = 0;
  Trie[i].num++;
  Trie[i].flag++;
}
int Trie_find(string s) {
  int i = 0, j = 0;
  while (j < s.size()) {
    if (Trie[i].nodes[s[j] - 'a'])
      i = Trie[i].nodes[s[j] - 'a'], j++;
    else
      return 0;
  }
  return i;
}
void Trie_delete(string s, int i, int j) {
  if (j > s.size()) return;
  if (j == s.size()) {
    Trie[i].flag--;
    Trie[i].num--;
    return;
  }
  Trie_delete(s, Trie[i].nodes[s[j] - 'a'], j + 1);
  Trie[i].num--;
  if (!Trie[Trie[i].nodes[s[j] - 'a']].num) Trie[i].nodes[s[j] - 'a'] = 0;
}
void Trie_calc(int i) {
  if (Trie[i].num == 1 && Trie[i].flag == 1) {
    Trie[i].win = false;
    Trie[i].lose = true;
    return;
  }
  Trie[i].win = Trie[i].lose = false;
  for (int j = 0; j < 27; j++) {
    if (Trie[i].nodes[j] > 0) {
      int to = Trie[i].nodes[j];
      Trie_calc(to);
      Trie[i].win |= (!Trie[to].win);
      Trie[i].lose |= (!Trie[to].lose);
    }
  }
}
