#include <bits/stdc++.h>
using namespace std;
struct Node {
  vector<Node*> next;
  Node() : next(26, nullptr) {}
};
Node* root = new Node;
void insert(string& s, int i, Node* c) {
  if (i >= s.length()) return;
  if (c->next[s[i] - 'a'] == nullptr) {
    c->next[s[i] - 'a'] = new Node;
  }
  insert(s, i + 1, c->next[s[i] - 'a']);
}
bool traverseWin(Node* c) {
  bool curWin = false;
  for (auto n : c->next)
    if (n != nullptr) {
      if (!traverseWin(n)) curWin = true;
    }
  return curWin;
}
bool traverseLose(Node* c) {
  bool curLose = false;
  int i = 0;
  for (auto n : c->next)
    if (n != nullptr) {
      ++i;
      if (!traverseLose(n)) curLose = true;
    }
  return curLose || (i == 0);
}
int main(int, char**) {
  std::ios::sync_with_stdio(false);
  int n, k;
  cin >> n >> k;
  for (int i = 0; i < n; ++i) {
    string s;
    cin >> s;
    insert(s, 0, root);
  }
  bool w = traverseWin(root);
  bool l = traverseLose(root);
  if (!w) {
    cout << "Second" << endl;
  } else {
    if (!l) {
      cout << (k % 2 == 0 ? "Second" : "First") << endl;
    } else {
      cout << "First" << endl;
    }
  }
  return 0;
}
