#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7, M = 2 * N;
int n, k;
struct Trie {
  int node[N], nxt[N][26], id;
  Trie() {
    memset(memw, -1, sizeof memw);
    memset(meml, -1, sizeof meml);
    iota(node, node + N, 0);
    id = 0;
    makeNode();
  }
  int makeNode() {
    memset(nxt[id], -1, sizeof nxt[id]);
    return id++;
  }
  void addString(const char *str) {
    int cur = 0;
    for (int i = 0; str[i]; ++i) {
      int &ni = nxt[cur][str[i] - 'a'];
      if (!~ni) ni = makeNode();
      cur = ni;
    }
  }
  int memw[N];
  int canWin(int u = 0) {
    int &ret = memw[u];
    if (~ret) return ret;
    ret = 0;
    for (int i = 0; i < 26; ++i) {
      int &v = nxt[u][i];
      if (~v) ret |= !canWin(v);
    }
    return ret;
  }
  int meml[N];
  int canLose(int u = 0) {
    int &ret = meml[u];
    if (~ret) return ret;
    ret = 1;
    bool any = 0;
    for (int i = 0; i < 26; ++i) {
      int &v = nxt[u][i];
      if (~v) any = 1, ret &= canLose(v);
    }
    return !any ? 1 : !ret;
  }
} trie;
char str[N];
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0);
  scanf("%d%d", &n, &k);
  for (int i = 0; i < n; ++i) {
    scanf("%s", str);
    trie.addString(str);
  }
  bool cw = trie.canWin(), cl = trie.canLose();
  if (!cw) {
    puts("Second");
  } else if (cl) {
    puts("First");
  } else {
    puts(k & 1 ? "First" : "Second");
  }
}
