#include <bits/stdc++.h>
using namespace std;
double DIST(double x1, double y1, double x2, double y2) {
  return sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
}
long long gcd(long long a, long long b) {
  if (b == 0)
    return a;
  else
    return gcd(b, a % b);
}
long long exp(long long a, long long b) {
  if (b == 0)
    return 1;
  else if (b & 1)
    return a * exp(a, b / 2);
  else {
    long long ans = exp(a, b / 2);
    return ans * ans;
  }
}
void sieve(long long n, long long *prime) {
  prime[0] = 1;
  prime[1] = 1;
  for (long long i = 2; i <= n; i++)
    if (prime[i] == 0)
      for (long long j = 2; j * i <= n; j++) prime[i * j] = 1;
}
long long n, k, root;
const int SIZE = 100005;
long long sz = 0, t[SIZE][26];
long long win[SIZE];
long long lose[SIZE];
long long newT() { return ++sz; }
void addTrie(char *s) {
  long long len = strlen(s);
  long long v = root;
  for (long long i = 0; i < len; i++) {
    long long c = s[i] - 'a';
    if (t[v][c] == 0) t[v][c] = newT();
    v = t[v][c];
  }
}
void dfs(long long u) {
  win[u] = 0;
  lose[u] = 0;
  bool isLeaf = true;
  for (long long i = 0; i < 26; i++)
    if (t[u][i] != 0) {
      isLeaf = false;
      long long to = t[u][i];
      dfs(t[u][i]);
      win[u] |= !win[to];
      lose[u] |= !lose[to];
    }
  if (isLeaf) {
    lose[u] = true;
  }
}
int main() {
  cin.sync_with_stdio(0);
  cin >> n >> k;
  root = newT();
  for (long long i = 0; i < n; i++) {
    char s[10005];
    cin >> s;
    addTrie(s);
  }
  dfs(root);
  if (win[root] && k == 1)
    cout << "First";
  else if (win[root] && lose[root])
    cout << "First";
  else if (win[root] && !lose[root]) {
    if (k % 2 == 1)
      cout << "First";
    else
      cout << "Second";
  } else if (win[root] == false)
    cout << "Second";
  return 0;
}
