#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const double EPS = 1e-9;
const int MOD = 1000000007;
const double PI = acos(-1.0);
const int MAXN = 110000;
const int maxm = 110000;
struct Trie {
  int numptr;
  struct Node {
    Node* son[26];
    int ptr;
    void init() {
      memset(son, (int)NULL, sizeof(son));
      ptr = -1;
    }
  } s[maxm], root;
  void init() {
    numptr = 0;
    root.init();
  }
  void ins(char* ch, int z) {
    Node* ptr = &root;
    for (int i = 0; ch[i] != 0; i++) {
      int x = ch[i] - 'a';
      if (ptr->son[x] == NULL) {
        s[numptr].init();
        ptr->son[x] = &s[numptr++];
      }
      ptr = ptr->son[x];
    }
    ptr->ptr = z;
  }
  bool dfs(Node* ptr, int win) {
    bool end = true, ret = false;
    for (int i = 0; i < (26); ++i) {
      if (ptr->son[i] != NULL) {
        end = false;
        if (!dfs(ptr->son[i], !win)) ret = true;
      }
    }
    if (end) return ptr->ptr == win;
    return ret;
  }
} trie;
char ipt[MAXN];
int main() {
  int n, m;
  while (~scanf("%d%d", &n, &m)) {
    trie.init();
    for (int i = 0; i < (n); ++i) {
      scanf("%s", ipt);
      int len = strlen(ipt);
      len = len % 2 == 0 ? 0 : 1;
      trie.ins(ipt, len);
    }
    bool win = trie.dfs(&trie.root, true);
    if (!win)
      puts("Second");
    else {
      if (m % 2 != 0)
        puts("First");
      else {
        bool lose = trie.dfs(&trie.root, false);
        if (lose)
          puts("First");
        else
          puts("Second");
      }
    }
  }
  return 0;
}
