#include <bits/stdc++.h>
using namespace std;
int n, k;
int Time = 0;
string s;
bool dp[2][(int)1e5 + 10];
struct Node {
  int nxt[26];
  bool leaf;
  Node() {
    for (int i = 0; i < 26; i++) nxt[i] = -1;
    leaf = 1;
  }
} trie[(int)1e5 + 10];
void dodaj(string s) {
  int niz[100010];
  for (int i = 0; i < s.size(); i++) niz[i] = s[i] - 'a';
  int tr = 0;
  for (int i = 0; i < s.size(); i++) {
    if (trie[tr].nxt[niz[i]] == -1) trie[tr].nxt[niz[i]] = ++Time;
    trie[tr].leaf = 0;
    tr = trie[tr].nxt[niz[i]];
  }
}
bool uradi0(int tr, bool minn) {
  if (trie[tr].leaf) {
    dp[0][tr] = 1;
    return 1;
  }
  for (int i = 0; i < 26; i++) {
    if (trie[tr].nxt[i] != -1) minn = min(minn, uradi0(trie[tr].nxt[i], 1));
  }
  dp[0][tr] = 1 ^ minn;
  return dp[0][tr];
}
bool uradi1(int tr, bool minn) {
  if (trie[tr].leaf) {
    dp[1][tr] = 0;
    return 0;
  }
  for (int i = 0; i < 26; i++) {
    if (trie[tr].nxt[i] != -1) minn = min(minn, uradi1(trie[tr].nxt[i], 1));
  }
  dp[1][tr] = 1 ^ minn;
  return dp[1][tr];
}
int main() {
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    cin >> s;
    dodaj(s);
  }
  uradi0(0, 1);
  uradi1(0, 1);
  if (dp[0][0] == 1 && dp[1][0] == 1)
    cout << "First" << endl;
  else if (dp[0][0] == 1)
    cout << "Second" << endl;
  else if (dp[1][0] == 1)
    cout << ((k % 2 == 1) ? "First" : "Second") << endl;
  else
    cout << "Second" << endl;
}
