#include <bits/stdc++.h>
using namespace std;
const long long mx = 100005;
struct TrieNode {
  struct TrieNode *children[26];
  bool isLeaf;
  bool odd, even;
};
struct TrieNode *getNode(void) {
  struct TrieNode *pNode = new TrieNode;
  if (pNode) {
    long long i;
    pNode->isLeaf = false;
    pNode->odd = false;
    pNode->even = false;
    for (i = 0; i < 26; i++) pNode->children[i] = NULL;
  }
  return pNode;
}
void insert(struct TrieNode *root, string key) {
  long long length = key.length();
  long long index;
  struct TrieNode *pCrawl = root;
  for (long long level = 0; level < length; level++) {
    long long index = key[level] - 'a';
    if (!pCrawl->children[index]) pCrawl->children[index] = getNode();
    pCrawl = pCrawl->children[index];
  }
  pCrawl->isLeaf = true;
  pCrawl->odd = true;
  pCrawl->even = false;
}
void doit(struct TrieNode *root) {
  for (long long i = 0; i < 26; i++) {
    if (root->children[i]) {
      doit(root->children[i]);
      root->odd |= root->children[i]->even;
      root->even |= root->children[i]->odd;
    }
  }
}
void solve() {
  long long n, k;
  cin >> n >> k;
  struct TrieNode *root = getNode();
  for (long long i = 0; i < n; i++) {
    string s;
    cin >> s;
    insert(root, s);
  }
  doit(root);
  long long flag1 = 0, flag2 = 0;
  for (long long i = 0; i < 26; i++) {
    struct TrieNode *t = root->children[i];
    if (t and (t->odd and !(t->even))) {
      flag1 = 1;
    }
    if (t and (t->even and !(t->odd))) {
      flag2 = 1;
    }
  }
  if (flag1 and flag2) {
    cout << "First\n";
    return;
  }
  if (!flag2 and flag1) {
    if (k % 2) {
      cout << "First\n";
    } else {
      cout << "Second\n";
    }
    return;
  }
  if (!flag1) {
    cout << "Second\n";
  }
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long t;
  t = 1;
  for (long long T = 1; T <= t; T++) {
    solve();
  }
}
