#include <bits/stdc++.h>
using namespace std;
vector<string> a;
struct Node {
  char letter;
  list<Node> nodes;
};
Node tree;
bool first_wins(int depth, Node& node) {
  if (node.nodes.empty()) return depth % 2;
  bool res = true;
  for (list<Node>::iterator i = node.nodes.begin(); i != node.nodes.end();
       i++) {
    res = res && first_wins(depth + 1, *i);
  }
  return res;
}
bool first_loses(int depth, Node& node) {
  if (node.nodes.empty()) return depth % 2 == 0;
  bool res = true;
  for (list<Node>::iterator i = node.nodes.begin(); i != node.nodes.end();
       i++) {
    res = res && first_loses(depth + 1, *i);
  }
  return res;
}
int main() {
  long long n, k;
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    Node* l = &tree;
    string s;
    cin >> s;
    for (int j = 0; j < s.size(); j++) {
      list<Node>::iterator k;
      for (k = l->nodes.begin(); k != l->nodes.end() && s[j] != k->letter; k++)
        ;
      if (k == l->nodes.end()) {
        Node node;
        node.letter = s[j];
        l->nodes.push_front(node);
        k = l->nodes.begin();
      }
      l = &(*k);
    }
  }
  bool res1 = false;
  for (list<Node>::iterator i = tree.nodes.begin();
       (i != tree.nodes.end()) && !res1; i++) {
    res1 = res1 || first_wins(1, *i);
  }
  bool res2 = false;
  for (list<Node>::iterator i = tree.nodes.begin();
       (i != tree.nodes.end()) && !res2; i++) {
    res2 = res2 || first_loses(1, *i);
  }
  if (!res1)
    cout << "Second" << endl;
  else if (res1 && res2)
    cout << "First" << endl;
  else
    cout << (k % 2 ? "First" : "Second") << endl;
  cin >> n;
  return 0;
}
