#include <bits/stdc++.h>
using namespace std;
struct trie_node {
  bool isLeaf;
  trie_node* edge[26];
} * root;
trie_node* getNode() {
  trie_node* ret = new trie_node;
  if (ret != NULL) {
    ret->isLeaf = true;
    for (int i = 0; i < 26; i++) {
      ret->edge[i] = NULL;
    }
  }
  return ret;
}
void add(string x) {
  int len = x.size();
  trie_node* curr = root;
  int extract;
  for (int i = 0; i < len; i++) {
    extract = x[i] - 'a';
    curr->isLeaf = false;
    if (curr->edge[extract] == NULL) {
      curr->edge[extract] = getNode();
    }
    curr = curr->edge[extract];
  }
}
int canGetVictory(trie_node* v) {
  if (v->isLeaf) return 0;
  int res = 0;
  for (int i = 0; i < 26; i++) {
    if (v->edge[i]) {
      res |= !canGetVictory(v->edge[i]);
    }
  }
  return res;
}
int canGetDefeat(trie_node* v) {
  if (v->isLeaf) return 1;
  int res;
  for (int i = 0; i < 26; i++) {
    if (v->edge[i]) {
      res = canGetDefeat(v->edge[i]);
      if (res == 0) return 1;
    }
  }
  return 0;
}
int main(int argc, char const* argv[]) {
  int n, k;
  scanf("%d%d", &n, &k);
  root = getNode();
  string temp;
  for (int i = 0; i < n; i++) {
    cin >> temp;
    add(temp);
  }
  bool canWin = canGetVictory(root);
  bool canLose = canGetDefeat(root);
  if (canWin && canLose) {
    cout << "First" << endl;
    return 0;
  } else if (canWin) {
    cout << (k % 2 ? "First" : "Second") << endl;
    return 0;
  } else {
    cout << "Second" << endl;
    return 0;
  }
  return 0;
}
