#include <bits/stdc++.h>
using namespace std;
namespace {
struct node {
  using dict = unordered_map<char, node*>;
  dict sons;
  int height;
  bool isWin;
  bool isLose;
  node(int h = 0) : height(h), isWin(false), isLose(false) {}
};
using borDict = node::dict;
node* gotoChar(node* root, char c) {
  if (!root) return nullptr;
  auto it = root->sons.find(c);
  if (it == root->sons.end()) {
    return root->sons[c] = new node(root->height + 1);
  }
  return it->second;
}
node* add(node* root, const string& s) {
  node* currentNode = root;
  for (auto chr : s) currentNode = gotoChar(currentNode, chr);
  return root;
}
void dfs(node* root) {
  if (!root) return;
  root->isWin = root->isLose = false;
  if (root->sons.empty()) root->isLose = true;
  for (auto& [_, sonPtr] : root->sons) {
    dfs(sonPtr);
    root->isWin |= (!sonPtr->isWin);
    root->isLose |= (!sonPtr->isLose);
  }
}
}  // namespace
int main() {
  node* root = new node();
  int n, k;
  cin >> n >> k;
  for (int i = 0; i < n; ++i) {
    string s;
    cin >> s;
    add(root, s);
  }
  dfs(root);
  if (!root->isWin) {
    cout << "Second\n";
  } else if (root->isLose) {
    cout << "First\n";
  } else {
    cout << ((k & 1) ? "First\n" : "Second\n");
  }
  return 0;
}
