#include <bits/stdc++.h>
struct Trie {
  Trie *child[26];
  bool canWin, canLose, isLeaf;
  Trie() : canWin(false), canLose(false), isLeaf(true) {
    for (int i = 0; i < 26; i++) {
      child[i] = NULL;
    }
  }
  ~Trie() {
    for (int i = 0; i < 26; i++) {
      if (child[i]) {
        delete child[i];
      }
    }
  }
  void add(char *str) {
    if (*str == 0) {
      return;
    }
    if (!child[*str - 'a']) {
      child[*str - 'a'] = new Trie();
    }
    isLeaf = false;
    child[*str - 'a']->add(str + 1);
  }
  void traverse() {
    if (isLeaf) {
      canLose = true;
      return;
    }
    for (int i = 0; i < 26; i++) {
      if (child[i]) {
        child[i]->traverse();
        if (!child[i]->canWin) {
          canWin = true;
        }
        if (!child[i]->canLose) {
          canLose = true;
        }
      }
    }
  }
};
int main() {
  int N, K;
  scanf("%d %d", &N, &K);
  Trie root;
  char buffer[100001];
  for (int i = 0; i < N; i++) {
    scanf("%s", buffer);
    root.add(buffer);
  }
  root.traverse();
  if (root.canWin && root.canLose) {
    puts("First");
  } else if (root.canWin) {
    puts((K & 1) ? "First" : "Second");
  } else {
    puts("Second");
  }
}
