#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000000,100000000000")
const unsigned long long INF = 1000000007;
const long double cp = 2 * asin(1.0);
const long double eps = 1e-9;
const unsigned long long mod = 1000000007;
using namespace std;
struct ver {
  int next[30];
  char leaf;
};
ver t[100001];
int sz;
void init_BOR() {
  memset(t, -1, sizeof(t));
  memset(t[0].next, 255, sizeof t[0].next);
  sz = 1;
}
void add_string(string a) {
  int v = 0;
  for (int(i) = 0; (i) < (a.size()); i++) {
    int k = a[i] - 'a';
    if (t[v].next[k] == -1) {
      memset(t[sz].next, 255, sizeof(t[sz].next));
      t[v].next[k] = sz++;
    }
    v = t[v].next[k];
  }
  t[v].leaf = true;
}
bool win[1000001], lose[1000001];
void dfs(int v) {
  char ok = false;
  for (int(i) = 0; (i) < (26); i++) {
    if (t[v].next[i] != -1) {
      dfs(t[v].next[i]);
      ok = true;
      win[v] = (win[v] or (not win[t[v].next[i]]));
      lose[v] = (lose[v] or (not lose[t[v].next[i]]));
    }
  }
  if (!ok) lose[v] = true;
}
int main() {
  int n, k;
  cin >> n >> k;
  init_BOR();
  for (int(i) = 0; (i) < (n); i++) {
    string s;
    cin >> s;
    add_string(s);
  }
  dfs(0);
  if (!win[0])
    puts("Second");
  else if (win[0] && lose[0])
    puts("First");
  else
    puts((k % 2) ? "First" : "Second");
  return 0;
}
