#include <bits/stdc++.h>
using namespace std;
template <class T>
T max(T a, T b, T c) {
  return max(a, max(b, c));
}
int nextInt() {
  int x = 0, p = 1;
  char c;
  do {
    c = getchar();
  } while (c <= 32);
  if (c == '-') {
    p = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = x * 10 + c - '0';
    c = getchar();
  }
  return x * p;
}
const int max_len = 100500, max_alpha = 26;
int t[max_len][max_alpha];
int szT;
int newT() { return ++szT; }
int n, k, root;
char s[max_len];
bool win[max_len], lose[max_len];
void addTrie(char* s) {
  int len = strlen(s);
  int v = root;
  for (int i = 0; i < len; i++) {
    int c = s[i] - 'a';
    if (t[v][c] == 0) t[v][c] = newT();
    v = t[v][c];
  }
}
void dfs(int v) {
  win[v] = false;
  lose[v] = false;
  bool isLeaf = true;
  for (int i = 0; i < max_alpha; i++) {
    if (t[v][i] != 0) {
      isLeaf = false;
      int to = t[v][i];
      dfs(to);
      win[v] |= !win[to];
      lose[v] |= !lose[to];
    }
  }
  if (isLeaf) {
    lose[v] = true;
  }
}
void answer(bool res) {
  puts(res ? "First" : "Second");
  exit(0);
}
int main() {
  n = nextInt();
  k = nextInt();
  root = newT();
  for (int i = 1; i <= n; i++) {
    scanf("%s", s);
    addTrie(s);
  }
  dfs(root);
  if (k == 1)
    answer(win[root]);
  else if (!win[root])
    answer(win[root]);
  else if (lose[root])
    answer(win[root]);
  else if (k % 2 == 1)
    answer(win[root]);
  else
    answer(!win[root]);
}
