#include <bits/stdc++.h>
using namespace std;
struct node {
  map<char, node> next;
  bool isLeaf;
  int canWin;
  int canLose;
} startNode;
void addString(node *root, string const &str) {
  node *currNode = root;
  currNode->canWin = -2;
  currNode->canLose = -2;
  for (int i = 0; i < str.length(); i++) {
    if (currNode->next.find(str[i] - 'a') == currNode->next.end()) {
      node n;
      n.canLose = -2;
      n.canWin = -2;
      currNode->next[str[i] - 'a'] = n;
      currNode = &currNode->next[str[i] - 'a'];
    } else {
      currNode = &currNode->next[str[i] - 'a'];
    }
    currNode->canWin = -2;
    currNode->canLose = -2;
  }
  currNode->isLeaf = true;
}
bool canWin(node *root) {
  if (!root->next.size()) return false;
  if (root->canWin != -2) return (root->canWin == 2) ? true : false;
  map<char, node>::iterator it = root->next.begin();
  for (; it != root->next.end(); ++it) {
    if (canWin(&it->second)) {
      root->canWin = 1;
    } else {
      root->canWin = 2;
      return true;
    }
  }
  return false;
}
bool canLose(node *root) {
  if (!root->next.size()) return true;
  if (root->canLose != -2) return (root->canLose == 2) ? true : false;
  map<char, node>::iterator it = root->next.begin();
  for (; it != root->next.end(); ++it) {
    if (canLose(&it->second)) {
      root->canLose = 1;
    } else {
      root->canLose = 2;
      return true;
    }
  }
  return false;
}
int main() {
  int n, k;
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    string st;
    cin >> st;
    addString(&startNode, st);
  }
  bool isWin = canWin(&startNode);
  bool isLose = canLose(&startNode);
  if (isWin && !isLose) {
    if (k % 2 == 0) {
      cout << "Second";
    } else
      cout << "First";
  } else if (isWin && isLose) {
    cout << "First";
  } else if (!isWin && isLose) {
    cout << "Second";
  } else if (!isWin && !isLose) {
    cout << "Second";
  }
  return 0;
}
